Отличный результат от поиска совпадений и проверки непосредственно в ячейке ()

В связи с приведенной ниже проблемой я по ошибке попросил дать отзыв в ЧР, но мне сказали, что это не то место, поэтому я хотел бы задать вам тот же вопрос.

Я не могу найти ответы в одиночку. этот очень простой код возвращает 2 разных результата, почему?!?! Я буду сумасшедшим...

Function FirstDay(t As String) As Boolean

d = DateSerial(Left(t, 4), Mid(t, 5, 2), Right(t, 2)) - 1
FirstDay = False
Var = Application.Match(d, Worksheets("Diary").Columns(1), 0)
If Not IsError(Var) Then
   FirstDay = True
End If

'this only to check if direct match Val to cell() retrieve the same result
If d = Sheets("Diary").Range("A12") Then Debug.Print "Yes" Else Debug.Print "no"

End Function

Я называю свою функцию с FirstDay("20161107") мой диапазон в sh("Diary").(columns(1)) являются

(date,01/01/2016,07/02/2016,06/03/2016,03/04/2016,08/05/2016,05/06/2016,03/07/2016,07/08/2016,04/09/2016,02/10/2016,06/11/2016,04/12/2016)

Var должно быть 12, но я получаю Error2042, тогда FirstDay = false, но если я вижу в ближайших окнах строку

If d = Sheets("Diary").Range("A12") Then Debug.Print "Yes" Else Debug.Print "no"

получить "Да"

Может кто-нибудь дать мне знать, что добавить? спасибо Фабрицио

1 ответ

Решение

Значение Lookup_value может быть числом, текстом или логическим значением. Не свидание Так что конвертируйте значение даты в число.

Var = Application.WorksheetFunction.Match(CDbl(d), Worksheets("Diary").Columns(1), 0)
Другие вопросы по тегам