Добрый день Подскажите, пож, по следующему вопросу Возможно ли создать массив, словарь, переменные или еще что-нибудь, где возможно хранить условия для оператора if? Не знаю, понятно ли описал задачу, ниже код для наглядности, что примерно хотелось бы получить. Не знаю существует ли что-то подобное или это мои фантазии...
Код
Sub aаaaa()
Dim s As Variant
Dim a As Long
ReDim s(1 To 2)
s(1) = "2=2 and 4>3"
s(2) = "3=2"
If s(1) Or s(2) Then a = 1
End Sub
vikttur написал: В бы описали саму задачу, а не придуманный способ решения.
Да, Вы правы. Ситуация такая, есть файлы Excel с БД с большим количеством столбцов. Которые обрабатываются макросами. Например, найти среднее значение, минимум... столбца по нескольким условиям, например столбец 2 больше 3 и меньше 10, столбец 4 равен 5 и т.д. Таких условий может быть и 5 и 55... и в день по несколько вариантов... Приходится постоянно редактировать макрос, добавлять и убавлять условия... Задумался как это можно делать быстро. Один из вариантов, какие пришли в голову, что записываю все условия в ячейки (чтобы не лезть в макрос), конкатенирую их через запятую и подставляю их каким-то способом как условие оператора if ... Глупость наверно, просто пытаюсь понять куда же рыть целесообразнее и какие в принципе существуют возможности
vikttur, спасибо за код, пока не знаю, смогу ли это к своей задаче применить - в силу того, что нужно время, чтобы разобраться с этой функцией и ее ограничениями... и думаю, что немало :( Боюсь, придется мне Вас донимать вопросами сегодня, завтра, послезавтра...
Цитата
skais675 написал: Ливиан. все же не хватает самих переменных...
Переменные - это столбцы с условиями, которых может быть разное количество. Создал пример, с БД и таблицей с названиями столбцов и с условиями. Задача - посчитать сумму (или 2-й минимум, или среднее за минусом одного максимума и одного минимума...) по столбцу 8, при выполнении условий для столбцов БД. Возможен ли такой макрос - универсальный, когда не нужно его корректировать, а при увеличении/уменьшении количества столбцов с условиями - просто вносить соответствующие изменения в столбцы K и L на Рабочий Лист и макрос автоматически эти изменения учтет?
Ливиан написал: нужно время, чтобы разобраться с этой функцией
Особо и нечегт разбираться. Функция ВЫЧИСЛЯЕТ текстовую строку. Нужно только правильно подсталять условия. Лучше, как в первом варианте в примере (отдельные переменные , так меньше вероятности ошибки) - вычислять отдельные составляющие условия.
Цитата
t = Evaluate("2<4<5")
Непрвильно составили условие. Вычисляем: 2 < 4 = True, после этого True < 5 = False Для этого случая праввильное условие: 2 < 4 And 4 < 5 или 4 > 2 And 4 < 5. В массив заносится два условия сравнения и оператор *. Вообще, все операторы можно выделить в один массив, константы - в другой, ссылки - в третий. И уже из этих массивов формировать любые условия.
vikttur, с оператором AND понял, спасибо. Разбираюсь с OR... в Вашем примере Debug.Print Evaluate(k) возвращает 2, т.е. OR - это сложение условий и если результат отличен от 0, то это Истина?
Or (ИЛИ) - оператор логический. Для Evaluate привычнее иметь дело с математическими операторами, поэтому логику для условий меняем на математику (+ вместо Or). Любое число, отличное от нуля, в логическом понимании - ИСТИНА. Т.е. оператору If-Then безразлично, число ему подставляют (число или логику), он вернет True/False.