Страницы: 1
RSS
Определить в какой диапазон попадает дата
 
Доброго времени суток, уважаемые форумчане. Подскажите, пожалуйста, есть ли АЛЬТЕРНАТИВНОЕ решение данной задачи. Итак, имеется массив с датами и соответствующими вариантами ответов:
Дата введенияНомер приказаВариант
25.10.2020 зимняя
01.03.2021 летняя
20.10.2021 зимняя
01.04.2022 летняя
требуется определить в какой диапазон попадает искомая дата (например 01.01.2021) и выдать соответствующий результат. Решаю я это сейчас циклом:
Код
    WS = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
        For i = UBound(WS) To 1 Step -1
            If WS(i, 1) <= [E2] Then
                MsgBox WS(i, 3): Exit For
            End If
        Next i
Все работает, считает правильно, но возник вопрос или даже скорее "хотелка", можно ли получить тот же результат НЕ ПРИМЕНЯЯ цикл? Просто эти данные нужны при наполнении словаря и "каждоразовый" цикл выглядит немного некрасиво. Повторюсь, готовое рабочее решение есть, хотелось бы знать есть ли другое.
Заранее спасибо всем откликнувшимся
 
Код
    MsgBox Application.WorksheetFunction.VLookup([e2], Range("A3:C" & Cells(Rows.Count, 1).End(xlUp).Row), 3, True)
По вопросам из тем форума, личку не читаю.
 
Спасибо, БМВ, про ВПР даже не вспомнил. Думал, что при строгом варианте функция и будет искать искомое число, а она получается как то не так ищет?
 
Параметр True - неточное соответствие. Находит значение, совпадающее с искомым или, если его нет, то наибольшее из меньших.
 
Цитата
OlegO написал:
не так ищет
ищет именно так как в мануале. Перечитайте про последний аргумент.
По вопросам из тем форума, личку не читаю.
 
Спасибо за помощь еще раз
 
Цитата
vikttur написал: наибольшее из меньших.
при условии что все отсортировано.
По вопросам из тем форума, личку не читаю.
 
Вынужден вновь поднять вопрос, т.к. вылезла проблема. Вариант от БМВ работает полностью правильно, если для сравнения указывать ячейку (E2). Но когда в коде я пытаюсь использовать для этого значение массива x(i.1) = 01.01.2021 (для примера):
Код
dt = "01.01.2021"
MsgBox Application.VLookup(dt, Range("A3:C" & Cells(Rows.Count, 1).End(xlUp).Row), 3, True)
перестает работать, пишет про несовпадение типов 8-0 . И в CDate и в CStr и в DateValue пробовал "обертывать" значение dt, ничего не помогает. Что я делаю не так и как это поправить?
 
dt = #01/13/2021#
dt = #2021/01/13#
13 для того чтоб было понятно где число, а где месяц.
ну и dt = CDbl(#10/21/2021#)
По вопросам из тем форума, личку не читаю.
 
И еще раз огромное спасибо, БМВ, теперь увидел какой тип данных VBA был нужен
Страницы: 1
Наверх