Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2012, 17:26   #1
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию Упрощение формулы "=ИЛИ(A1=1;...A99=1)"

Добрый день и наступающим вас!
Есть конструкция такого типа:
Цитата:
=ЕСЛИ(ИЛИ(A1=1;A2=1;...A99=1);"YES" ;"NO")
Она довольно массивна. Ее можно упростить как-то? А то ломаю себе голову, лажу по интернету а идею не приходят.

Самое идеальное было бы сделать что-то типа такого:
Цитата:
=ЕСЛИ(ИЛИ(A1:A99=1);"YES";"NO")
или:
Цитата:
=ЕСЛИ(ИЛИ(A1:A99)=1;"YES";"NO")
или вообще:
Цитата:
=ЕСЛИ(A1:A99=1;"YES";"NO")
Но понятно, что эксель этого не поймет.

Есть какой-то синтаксис чтобы заставить эксель поочередно сравнивать в масиве значения?
mrMad-Cat вне форума Ответить с цитированием
Старый 06.01.2012, 17:49   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

а если так:
=ЕСЛИ(СЧЁТЕСЛИ(A1:A99;1)>0;"YES";"N O")
nilem вне форума Ответить с цитированием
Старый 06.01.2012, 18:28   #3
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

А что надо-то?
Код:
=СУММПРОИЗВ(--(A1:A99=1))
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 06.01.2012, 18:32   #4
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Цитата:
Сообщение от mrMad-Cat Посмотреть сообщение
Самое идеальное было бы сделать что-то типа такого:
Цитата:
=ЕСЛИ(ИЛИ(A1:A99=1);"YES";"NO")
Но понятно, что эксель этого не поймет.
Очень даже поймет. Только подход знать надо
Вводите как формулу массива, т.е. вместо Enter - одновременно Ctrl+Shift+Enter
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 07.01.2012, 16:54   #5
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Вообще у меня ситуация такая:
Цитата:
=IF(OR(E211<0;F211<0;G211<0;H211<0; I211<0;J211<0;K211<0;L211<0;M211<0; N211<0;O211<0;P211<0);"ОШИБКА!!! Остаток ДС на конец периода не может быть отрицательным!";"")
Я просто обобщил ее. Варианты Serge 007 и nilem подходят для решения именно того что в певом посте обходным методом но не ситуации в целом.

DV68 спасибо. Надо почитать детальней что это за формулы масивов, таки оно сработало. Хотя я немного не на такое решение расчитывал. Тут главный подвох что если зайти потмо в эту ячейку и рефлекторно из нее выйти через ENTER то формула масива превратится в обычную формулу и уже не будет работать.

Последний раз редактировалось mrMad-Cat; 07.01.2012 в 17:55.
mrMad-Cat вне форума Ответить с цитированием
Старый 07.01.2012, 18:37   #6
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
По умолчанию

Вариант DV68 не подошел таки - ячейка в которой ее надо исполнять - объедененная, и CSE фомрулы там нельзя использовать. Вообще CSE формулы имеют ряд подвохов которые заставляют отказатся от их использования. Но всетаки странно что в эксель нету другой более просто стандартнйо возможности решения этой ситуации.
mrMad-Cat вне форума Ответить с цитированием
Старый 07.01.2012, 18:39   #7
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Вообще-то все решения работают:
Код:
=IF(COUNTIF(E211:P211;"<0");"ОШИБКА!!! Остаток ДС на конец периода не может быть отрицательным!";"")
Код:
=IF(SUMPRODUCT(--(E211:P211<0));"ОШИБКА!!! Остаток ДС на конец периода не может быть отрицательным!";"")
еще вариант:
Код:
=REPT("ОШИБКА!!! Остаток ДС на конец периода не может быть отрицательным!";FREQUENCY(E211:P211;-10^-99)>0)
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн

Последний раз редактировалось DV68; 07.01.2012 в 18:57.
DV68 вне форума Ответить с цитированием
Старый 07.01.2012, 18:58   #8
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от mrMad-Cat Посмотреть сообщение
Вариант DV68 не подошел таки - ячейка в которой ее надо исполнять - объедененная, и CSE фомрулы там нельзя использовать.
Это кто Вам сказал такую глупость?
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 07.01.2012, 21:57   #9
mrMad-Cat
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 33
Радость

DV68
Код:
=IF(COUNTIF(E211:P211;"<0");"ОШИБКА!!!";"")
Да, точно, большое спасибо! Очень оригинальное решение. Я в него сразу не въехал. Даже не знал что эксель так это понимает. Тоесть значение COUNTIF любое отличное от нуля принимается IF как ИСТИНА, а если COUNTIF выдаст 0 то это для IF конечно ЛОЖЬ. Гениально! Это и буду использовать наверное.
nilem спасибо!

Код:
=REPT("ОШИБКА!!! Остаток ДС на конец периода не может быть отрицательным!";FREQUENCY(E211:P211;-10^-99)>0)
Это уже извращение высшего пилотажа ))

Но все же, это все немного обходные пути, вам не кажется?
Идея задачи заставить проверить поочередно несколько ячеек на соответствие определенному общему критерию.
Всетаки без формул массивов "в лоб" эту ситуацию я так понял не разрешить.
Я думал что в экселе будет предусмотренно что-то типа такого и что я просто до конца не знаю синтаксиса:
Код:
=IF({E211:P211}<0);"ОШИБКА!!!";"")
или какой-то специальной функции:
Код:
=IF(ARRAY(E211:H211;I211;J211:P211)<0);"ОШИБКА!!!";"")
Serge 007
Цитата:
Это кто Вам сказал такую глупость?
Эксель сказал При попытке сделать CSE выдал сообщение об ошибке содержания типа "формула масива в объедененной ячейке неправильная". Если объединение снять то оно работало.

Последний раз редактировалось mrMad-Cat; 07.01.2012 в 22:00.
mrMad-Cat вне форума Ответить с цитированием
Старый 08.01.2012, 02:08   #10
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от mrMad-Cat Посмотреть сообщение
Эксель сказал При попытке сделать CSE выдал сообщение об ошибке содержания типа "формула масива в объедененной ячейке неправильная". Если объединение снять то оно работало.
Не обращайте внимания. Excel перестраховывается. На самом деле такие формулы работают нормально, т.е. правильно.
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить кнопку "Поделится" или "мне нравится" в phpbb3 borecc PHP 1 07.03.2011 13:44
Напечатать текст, удалив из него все цифры и знаки "+" или "–". Язык С++. KaylasMKTY Помощь студентам 8 07.03.2010 21:35
PHP(или другой язык): Получить все пары "имя" -> "значение" переданные методом POST KingOfNothing PHP 4 12.04.2009 14:06
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51