Функция IIf

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Как правильно прописать строку в макросе?
Условия: если пол (pol) равен м и возраст (v1) больше 18, то "мужчины"; если пол (pol) равен ж и возраст (v1) больше 18, то "женщины".
Строка с половиной условия (если пол (pol) равен м) выглядела так:
GrVozr2 = IIf(pol = "м", "мужчины", pol & "," & Str(v1) & " -" & Str(v2 - 1) & " лет")
А как прописать, чтобы выполнялось условие полностью (если пол (pol) равен м и возраст (v1) больше 18, то "мужчины")? Это нужно для соревнований, и если возраст меньше 18 то категория уже другая (юниоры, юноши, мальчики).
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Если это макрос, то вместо извращённых формул пишите обычные IF...ELSE IF...ELSE или SELECT CASE
IIf была придумана не для макросов, а чтобы простую логику можно было реализовать в одной формуле.
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Да, это макрос...
то вместо извращённых формул пишите обычные IF...ELSE IF...ELSE или SELECT CASE
Знать бы ещё как это делается... Пропишите, если вас это не затруднит...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

select case v1
   case Is > 18
      if pol="м" then GrVozr2 = "мужчиы" else GrVozr2 = "женщины"
   case Is > 10 'поставил 10 произвольно, так как не была указана вторая раница
      if pol="м" then GrVozr2 = "юноши" else GrVozr2 = "девушки"
   case else
      if pol="м" then GrVozr2 = "мальчики" else GrVozr2 = "девочки"
end select

Однако, если это MS Excel, то можно написать длинную-длинную формулу, и вообще обойтись безо всяких макросов.
Условия объединяются функциями И(х,у) ИЛИ(х,у) НЕ(х)
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Спасибо! Работает!
А как прописать если возраст от 11 до 12 лет?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

В case выполняется только одна секция — первая, которая подойдёт. Поэтому, в условиях достаточно проверять только 1 границу, а не вхождение в диапазон

Код: Выделить всё

case is > 18:  '   x>18   
case is > 12:  '   13>x>=18
case is > 10:  '   10>x>=12
case else    :  '   x<=10
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Понял. Спасибо! Я почти догадался, только начинал с меньшего числа...
case is > 10
case is > 12
case is > 14
case is > 16
case is > 18
...и наверное поэтому не получилось.
Ответить