Я довольно новичок в VBA и работаю над пользовательской функцией (которая будет использоваться для более сложных целей в будущем - вот почему я хочу это сделать, используя VBA вместо стандартные формулы), задачей которой является получение даты из ячейки и определение ее позиции (номер строки) в столбце (например, столбец А).IsNumeric/IsError возвращает ошибку
Эта простая задача, которую я решил с помощью следующей процедуры:
Function TempRowNumber(OrgDate)
TempRowNumber = WorksheetFunction.Match(OrgDate, Range("A:A"), 0)
End Function
Он хорошо работает, конечно. Однако проблема заключается в том, что может случиться, что введенная функция не включена в диапазон. В этом случае функция должна выполнить поиск последней введенной даты до этой даты. Поскольку в этом диапазоне даты всегда сортируются в хронологическом порядке, я планировал построить формулу проверки ошибок (как условие) и соответствующий цикл.
Проблема заключается в том, что если я пишу формулу так:
=ISERROR(MATCH(C23;A:A;0))
все это хорошо (формула возвращает TRUE, если дата из ячейки С23 находится в колонке А, и FALSE, если дата не найден). Но если попытаться переписать эту формулу в процедуре VBA, I.A .:
Function FindDate(OrgDate)
FindDate = IsError(WorksheetFunction.Match(OrgDate, Range("A:A"), 0))
End Function
пользовательская функция возвращает #VALUE!
ошибку, если дата не найдены (и FALSE, если это не так).
Ниже я прикладываю снимки о том, что я описываю.
У вас есть идея, что я должен делать? Заранее спасибо.
Используйте функции * Iif() * и * IsError) *. –
Но я действительно использую функцию IsError(), и она возвращает «#VALUE!». вместо значения TRUE, если дата, которую я ищу, не найдена. Однако функция Iif() указывает только, что делать в случае значений TRUE и FALSE, тогда как у меня есть проблема с условием (как описано выше, процедура VBA, написанная мной, приводит к ошибке FALSE или ошибке «#VALUE!») , – azera