Консультация № 109225
13.11.2007, 15:39
0.00 руб.
0 5 5
Уважаемые эксперты, чем заменить функцию "Если", чтобы избежать ошибки(см. приложение). Проблема вот в этом
"До 7 функций ЕСЛИ могут быть вложены друг в друга"
Нужно проверять 15 значений.
Заранее ОГРОМНОЕ спасибо.

Приложение:
=ЕСЛИ(C2<5;"5";ЕСЛИ(C2<10;"6"; ЕСЛИ(C2<15;"7";ЕСЛИ(C2<30;"8";ЕСЛИ(C2<50;"9";ЕСЛИ(C2<100;"10"; ЕСЛИ(C2<200;"11";ЕСЛИ(C2<300;"15"; ЕСЛИ(C2<500;"20";ЕСЛИ(C2<1000;"25"; ЕСЛИ(C2<1500;"30";ЕСЛИ(C2<2000;"35";ЕСЛИ(C2<2500;"40";ЕСЛИ(C2<3000;"45"; ЕСЛИ(C2<30000;"50";)))))))))))))))

Обсуждение

Неизвестный
13.11.2007, 16:02
общий
это ответ
Здравствуйте, Evgen818!

Воспользуйтесь функцией ВПР:

1. Создайте в свободном месте книги таблицу пределов (например, в А1:В16)

До |Знач
0 |5
5 |6
10 |7
15 |8
30 |9
50 |10
100 |11
200 |15
300 |20
500 |25
1000 |30
1500 |35
2000 |40
2500 |45
3000 |50

2. теперь если в C2 проверяемое значение, то написав формулу

=ВПР(C2;$A$2:$B$17;2)

Вы будете получать жалаемый результат.
Неизвестный
14.11.2007, 06:35
общий
это ответ
Здравствуйте, Evgen818!

Если в книге допустимо использовать модулей VBA, то можно добавить модуль и написать свою функцию, пример в приложении. Формула в ячейке:

=my_func(C2)

Если в С2 не будет никаких значений, нецифровое значение либо значение вне проверямого диапазона - функция вернет 0. Кстати заковыченные "5", "6" и т.д. - это так и надо? В данном виде это не числа, а строкове представление чисел. При общем и числовых форматах ячейки Excel их конечно преобразует в числа, но если изначально нужны числа, то кавычки лучше убрать.

Если есть общие вопросы по работе с модулями VBA (как добавить модуль, функцию и т.д.), то лучше почитать справку или книгу по VBA.


Приложение:
Public Function my_func(num As Variant) As Variant Select Case Val(num) Case 1 To 5: my_func = "5" Case 6 To 10: my_func = "6" Case 11 To 15: my_func = "7" Case 16 To 30: my_func = "8" Case 31 To 50: my_func = "9" Case 51 To 100: my_func = "10" Case 101 To 200: my_func = "11" Case 201 To 300: my_func = "15" Case 301 To 500: my_func = "20" Case 501 To 1000: my_func = "25" Case 1001 To 1500: my_func = "30" Case 1501 To 2000: my_func = "35" Case 2001 To 2500: my_func = "40" Case 2501 To 3000: my_func = "45" Case 3001 To 30000: my_func = "50" Case Else: my_func = "0" End SelectEnd Function
Неизвестный
14.11.2007, 06:54
общий
это ответ
Здравствуйте, Evgen818!

вариант одной формулой:

=ВЫБОР(ПОИСКПОЗ(C2;{0;5;10;15;30;50;100;200;300;500;1000;1500;2000;2500;3000};1);5;6;7;8;9;10;11;15;20;25;30;35;40;45)

принцип тотже как и у Genyaa, но вместо ВПР используется ПОИСКПОЗ, он не требует дополнительных таблиц.
Неизвестный
14.11.2007, 09:41
общий
это ответ
Здравствуйте, Evgen818!
Могу порекомендовать Вам не перегружать рабочий лист такими сложными формулами, а применить более гибкие средство - программирование.
Напишите свою функцию (см. приложение) и вставьте ее в ячейки рабочего листа

"=MY_Fn(адрес_ячейки)"

вместо той страшной формулы.

На будущее, указывайте версию MS Office.


Приложение:
Function MY_Fn(ByVal A As Variant) As Variant‘Теcтировалось под MSO2003Select Case ACase Is < 5 MY_Fn = 5Case Is < 10 MY_Fn = 6Case Is < 15 MY_Fn = 7‘...‘Так можно продолжать долго, больше 15 раз ;-)‘...Case Else MY_Fn = "Ошибка!"End SelectEnd Function
Неизвестный
14.11.2007, 12:29
общий
это ответ
Здравствуйте, Evgen818!
В приложении Макрос - рядом с активной ячейкой, в которой значение, появляется требуемый результат

Приложение:
Sub Macros1()Dim Number, ResNumber = ActiveCell.ValueSelect Case Number Case Is < 5 Res = 5Case Is < 10 Res = 6Case Is < 15 Res = 7Case Is < 30 Res = 8Case Is < 50 Res = 9Case Is < 100 Res = 10Case Is < 200 Res = 11Case Is < 300 Res = 15Case Is < 500 Res = 20Case Is < 1000 Res = 25Case Is < 1500 Res = 30Case Is < 2000 Res = 35Case Is < 2500 Res = 40Case Is < 3000 Res = 45Case Is < 3000 Res = 50Case Else ‘ Other values. Res = 0End SelectActiveCell.Offset(0, 1).ActivateActiveCell.Value = ResEnd Sub
Форма ответа