Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Поиск позиции даты методом Evaluate
 
Мяв!
Имеем 2 формулы
Код
=ПОИСКПОЗ(D1;A:A)
=ПОИСКПОЗ(ДАТАЗНАЧ("05.01.2019");A:A)

на листе работают обе
Пытаюсь втиснуть в макрос - первая работает, а вторая нет.
В чем проблема?
Крутил уже всяко.
Код
Sub qq()
    x = Evaluate("MATCH(D1,A:A)")
    xx = Evaluate("MATCH(DATEVALUE(""05.01.2019""),A:A)")
    Debug.Print x
    Debug.Print xx
End Sub
 
Проблема в текстовом представлении даты.
Сработают: ""2019/01/05"", ""2019-01-05"",
а также ""01/05/2019"", ""01-05-2019"" - месяц с датой здесь в другом порядке,
Для надежности преобразование текста в дату лучше делать в VBA с помощью DateSerial(), а в выражении для Evaluate -  DATE(2019,1,5)
Изменено: ZVI - 24 Янв 2019 03:33:03
 
Владимир, премного благодарен.
И преобразовывал дату всячески, и в число превращал, а вот через "с заду" подставить, соображения не хватило.
В итоге заработало и так
Код
    zz = Evaluate("MATCH(DATEVALUE(""" & Format("05.01.2019", "yyyy\/mm\/dd") & """),A:A)")

и так
Код
     xxx = Evaluate("MATCH(DATE(" & Join(Split(Format("05.01.2019", "yyyy mm dd")), ",") & "),A:A)")
     xxxx = Evaluate("MATCH(DATE(" & Format("05.01.2019", "yyyy,mm,dd") & "),A:A)")

и требуемое
   
Код
zzz = Evaluate("MATCH(DATEVALUE(""" & Format(Me.TextBox5.Value, "yyyy\/mm\/dd") & """),A:A)")

Какой из вариантов предпочтительней?
 
RAN,  Андрей, а зачем промежуточное преобразование, ведь фактически надо
Код
zzz = Evaluate("MATCH(" & CDate(Me.TextBox5.Value) & ",A:A)")

Или надо было DATEVALUE сохранить?
 
Миш, вероятно, проблема локали.
Это было первое, что попробовал.
Error 2015
 
Здравствуйте, коллеги! Комментарий к #4. Функция Evaluate "понятия не имеет" о локализации (что соответствует ответу Владимира в #2). В #4 значение Cdate вернет дату, которая будет преобразована в текст в соответствии с региональными настройками (например, 24.01.2019).
Владимир
 
Цитата
sokol92 написал:
В #4 значение Cdate вернет дату
Владимир, приветвую. Все правильно, я тормознул, там же в строку все преобразуется, просто глаз замылился  …
хм, а если скармливать не дату, а число? не Cdate а cdbl(cdate( ?
Изменено: БМВ - 24 Янв 2019 18:10:43
 
Михаил, а кто у нас спец по Match?  :)  На мой (непросвещенный) взгляд, должно работать (если не будет компоненты времени).
Изменено: sokol92 - 24 Янв 2019 18:24:31
Владимир
 
Тогда еще int добавить :-) . Думаю Андрей проверит быстре. Ибо не надо пример рисовать.
 
Я, естественно, проверил (на нескольких региональных настройках). :)  
Владимир
 
Цитата
БМВ написал:
просто глаз замылился
Вот и и у меня вчера тоже.
Сейчас просмотрел - cdbl(cdate( применял только в составе большой формулы, имевшей еще 1 ошибку.
А когда выдрал этот фрагмент, на число уже не проверил, стал бодаться с функциями даты.
Цитата
БМВ написал:
Ибо не надо пример рисовать.
Конечно не надо. Он приложен. А текст из текстбокса на раз заменяется на "05.01.2019"
 
Анлрей, я тогда ваще с мобилки писал :-) .

Off. К своему стыду тут только недавно обнаружил что Анрюшу :-) (Android) можно переключить на другой язык интерфейса и вслед за ним сменится локализация мобильного Excel. О чудо, я могу там читать и писать формулы :-)
 
Привет!
Цитата
ZVI написал:
Изменено: ZVI  - 24 Янв 2019 03:33:03
4000 сообщение изменено в 03:33:03  
 
У Владимира всегда всё продумано. :)  
Владимир
Страницы: 1
Читают тему (гостей: 1)
Наверх