Найти самую раннюю дату в VBA - PullRequest
0 голосов
/ 03 мая 2018

У меня много дат в столбце D. Мне нужно найти студента с самой ранней датой и показать следующую информацию в окне сообщения:

Sub Finddate()
    Dim Mn As Integer
    Mn = Application.Match(Application.Min(Range("D2:D18288")), Range("D2:D18288"), 0)
    MsgBox ("For the student with the earliest date (" & Range("D" & Mn) & ") the following information applies: " & Range("k" & Mn) & ", " & Range("L" & Mn) & " and " & Range("M" & Mn))
End Sub

Однако, когда я запускаю макрос, он показывает неправильную дату. Самая ранняя дата в листе - 31-08-1996, но в ней говорится, что самая ранняя дата - 01-02-2010, и если я напишу =min(D2:D18288) в Excel, она найдет правильную дату. Но мне нужно, чтобы он работал и в VBA. И если я изменяю мин на макс, он также находит неправильную дату. Но если я вместо этого напишу:

Mn = Application.Match(Application.Max(Range("D2:D18288")), Range("D2:D18288"))

Показывает правильную дату, но мне нужно найти минимальную дату, а не максимальную, и когда я изменяю максимальное значение на минимальное, я получаю ошибку несоответствия типов. Я действительно не знаю, что случилось, действительно надеюсь, что кто-то может мне помочь!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Когда что-то подобное происходит, попробуйте повторить результат, используя небольшой образец. Например. этот, в надежде вернуть Peter6 для самой маленькой информации:

enter image description here

Option Explicit

Public Sub TestMe()

    Dim dateRanges As Range
    Set dateRanges = Range("D1:D11")

    Dim mn As Variant
    With Application
        mn = .Match(.Min(dateRanges), dateRanges, 0)
    End With

    MsgBox Range("E" & mn).Value2

End Sub

Как только это сработает, попробуйте исправить это на своем большом примере.

Вы, вероятно, заметите, что mn не должно быть Integer, поскольку Integer до 32767, и это проанализировано для даты 16-September-1989, что давно. В вашем случае это не ошибка, потому что вы не ссылаетесь mn непосредственно на дату, но это может произойти позже.

0 голосов
/ 03 мая 2018

Ваша индексация отключена на 1 ................ потому что данные начинаются с D2 вместо D1 Mn указывает на ячейку чуть выше минимума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...