Страницы: 1
RSS
как работает ЕСЛИ (и др. подобные функции с условием)?, происходит ли пересчет вложенных функций второго условия
 
Здравствуйте.

=ЕСЛИ(A1=1;"OK";Х)

имеем такую формулу... на месте "Х" будет вписана супер-пупер сложная формула.

если в ячейке не единица, то естественно excel вычисляет "Х" и возвращает полученный результат...
вопрос:
если в ячейке А1 - стоит единица, то как ведет себя в этом случае excel? просто возвращает "ОК" и завершает вычисления? или в своих недрах excel в любом случае пересчитывает ту функцию (связку функций), которую я вложу вместо "Х"?

Подобную формулу планирую применять к сотням тысяч строк, в которых в подавляющем большинстве случаев будет значение удовлетворяющее первому условию (т.е. в ячейке А1 будет единица)...
т.е. ЛОЖЬ будет на столько редко, что по идее та сложная формула (которая будет на месте "Х") не должна особо нагружать excel...
или я ошибаюсь?
 
Проверьте самостоятельно. Впишите вместо "X" имя своей функции, в которой можно выдать какое-нибудь сообщение при вызове.
Владимир
 
На своем компе (средней мощности) пробовал. наворочал каких-то связок функций... и не смог сделать однозначный вывод... субъективно разницы не заметил...
та мифическая супер-пупер сложная формула еще не готова, сам я ее сотворить не в силах... т.е. мне ее сотворение нужно будет просить специалиста, который на мой вопрос (по теме) дал ответ "не знаю".
+ у многих коллег (которые и будут работать с файлом) компы древние и эмпирическим способом ответ на свой вопрос искать будет сложней, нежели получить его от людей ведающих этим знанием...

Повторюсь - я пробовал найти ответ опытным путем, но то-ли плацебо, то-ли действительно разницы нет...
Поэтому и решил спросить здесь...

Ранее я интересовался несколько другой, но подобной проблемой:
меня интересовал вопрос пересчета правил УФ, находящихся после правила с установленной галочкой "остановить если истина"... в том случае меня также беспокоила тема снижения нагрузки на файл...
так вот в тот раз я сразу получил ответ, что правила в любом случае будут пересчитаны... т.е. установка той галочки по сути не снижает нагрузку на файл... просто отключает визуальное подтверждение выполнения правил УФ...
получил ответ и угомонился... т.е. бросил идею с УФ.

Сейчас так-же обращаюсь с надеждой получить простой ответ.
 
Если выполняется первая проверка, то вторая не выполняется: это часто используется для сокращения времени работы формул (функций и макросов).
 
Разве я дал сложный совет в #2?
Добавьте стандартный модуль:
Код
Option Explicit
Function MyFunc(arg)
  MsgBox "MyFunc: " & arg
  MyFunc = -arg
End Function
В ячейку B1 добавьте формулу:
Код
=ЕСЛИ(A1>1; 1; MyFunc(A1))

Теперь меняйте ячейку A1 и смотрите, в каких случаях будет вызываться MyFunc.
Этот подход пригодится и для УФ.
Владимир
 
Юрий, спасибо.
и Соколу тоже спасибо.

ответ получен
тема закрыта
 
Даже не вдаваясь в конкретный механизм реализации функции ЕСЛИ можно предположить что так или иначе все сведётся к условным операторам А там не важно как они реализованы конкретно, но выглядит это приблизительно как
Если условие То
делать если истина и перейти за оператор "Конец Если"
Иначе
делать если ложь и перейти за оператор "Конец Если"
Конец Если
Т.е. ни один программист не напишет код вида:
делать на всякий случай1 и где-то в дебрях стека запомнить результат

делать на всякий случай2 и где-то в дебрях стека запомнить результат
Если условие То
найти в дебрях стека результат запомненный на всякий случай вроде под номером один, показать его юзеру и закончить обработку условия
Иначе
найти в дебрях стека результат запомненный на всякий случай вроде под номером один, показать его юзеру и закончить обработку условия
Конец Если
Так что можете не переживать - пишите любые многоэтажные формулы в функции ЕСЛИ - они будут считаться только при выполнении условия для их выполнения.

А вот лично мне интересно как условные функции или условные операторы вычисляют сложные условия, т.е.в конструкции
Код
If True Or 2 * 2 = 5 Then
Будет ли выполняться  дважды два и проверка с эталоном или же достаточно будет первого True? Ведь при полном вычислении выполнение кода со сложным условием будет дольше чем написать два условных оператора со своим условием каждый, т.к. в первом случае вычисляется все (два) условия, а во втором часть условия будет вычисляться только при выполнении или не выполнении первого условия.
Не стреляйте в тапера - он играет как может.
 
Цитата
Ts.Soft написал:
А вот лично мне интересно
так именно для удовлетворения такого интереса и написал Владимир #5, но в целом и так понятно, что все посчитает а на итоговом результате сделает ветвеление, попробуйте так например If True Or (1 / 0)  Then
Изменено: БМВ - 14.10.2018 19:41:53
По вопросам из тем форума, личку не читаю.
 
Я не силен в этом, поэтому и спросил...
при том, что как я уже писал ранее, меня интересовала логика работы той галочки "остановить если истина" в случае с УФ... - тоже ведь не совсем то, чего ждет обыватель? с какой целью делается пересчет всех правил, если первое правило выполнено и галочка стоит "остановить ..."...
правильно? и ведь нашелся тот программист, который допустил реализацию такой логики...
А я допустил тот факт, что может быть этот-же человек принимал участие в создании функции "ЕСЛИ" и др. подобных
Изменено: DNC - 14.10.2018 19:49:22
 
Цитата
DNC написал:
логика работы той галочки "остановить если истина" в случае с УФ... - тоже ведь не совсем то, чего ждет обыватель?
Почему?
Все логично, для УФ проверяются все критерии и если их много  и они корректно отсортированы , то незачем проверять остальные, но автоматом это Excel не может решить.
По вопросам из тем форума, личку не читаю.
 
Еще я для себя сделал вывод, что при использовании ЕСЛИ с условиями задаваемыми сложными формулами, то лучше в первое условие вкладывать формулу, которая имеет наибольшую вероятность получения ИСТИНы... а если вообще отсутствует понимание того, какая из формул условий с большей долей вероятности вернет истину, то в этом случае нужно первой использовать формулу с наименьшей прожорливостью вычислительных ресурсов...

ранее вообще никогда не парился по поводу того какое условие обозначить первым в ЕСЛИ
Изменено: DNC - 14.10.2018 19:59:16
 
БМВ, ту галочку в УФ хотел применить для создания включателя/выключателя правил УФ... большого количества правил УФ.
т.е. рассчитывал, что при помощи той галочки я смогу запускать пересчет правил тогда, когда мне это нужно...
первое условие выполняется - происходит остановка пересчета остальных правил - с файлом легче работать...
когда нужно включил остальные правила - проверил что хотел - снова отключил...
а по факту оказалось, что правила в любом случае пересчитываются... вне зависимости от галочки...
Кому может быть нужен результат пересчета правил, если его никто не видит? для кого excel тужится в это время?
 
Поищите тему "Сокращенное вычисление логических операторов" в сети. К сожалению, я нашел только на английском. С этим нужно быть предельно внимательным: например, в VBA дело обстоит иначе, чем в формулах Excel.
Код
Sub test()
  MsgBox IIf(2 > 1, 0, 1 / 0)
End Sub
Изменено: sokol92 - 14.10.2018 20:18:00
Владимир
 
Нет, если дошли до условия (с верхнего вниз) которое выполнено и помечено этой галочкой, то последующие условия не проверяются.
По вопросам из тем форума, личку не читаю.
 
Цитата
sokol92 написал:
К сожалению, я нашел только на  английском .
Оценка короткого замыкания
 
Мотя,спасибо! Автомат, конечно, мастерски переводит - настоящий искусственный интеллект :)  
Владимир
 
Мотя, по какому случаю ребрендинг? ))
 
БМВ,
в этой теме обсуждалось, и в завершении vikttur дал мне ответ, что подобным образом работу файла не облегчить...
я его ответ понял так, что даже при установленной галочке все правила УФ будут пересчитываться, только без соответствующей визуализации.
или я не правильно его понял?
 
Еще раз призываю Вас к самостоятельным исследованиям (см. #5)
Владимир
 
Атмосфера предельно накалилась, у меня затряслись коленки и инстинкт самосохранения призывает валить отседа, пока по моське не надавали.
Всем спасибо...
 
DNC, Бегло посмотрел ссылку, и думаю Виктор имел ввиду много разных УФ  в разных диапазонах, а не в одном.  Другое дело что даже  при этой галочке условие проверяется столько раз, сколько отдельных условий  сделано в УФ. Но  только те, до которых дошли.
По вопросам из тем форума, личку не читаю.
 
Цитата
DNC написал:
и инстинкт самосохранения призывает валить отседа, пока по моське не надавали.
Тут все мирные, особенно Михаил (если поблизости нет котов).
Кстати Михаил привел отличный пример (надеюсь, с моей подачи). Можно с ним (примером) играться до утра: менять значения ячеек, создавать новые листы, менять в них ячейки и возвращаться на исходный лист и т.д...
Изменено: sokol92 - 14.10.2018 20:53:05
Владимир
 
Цитата
sokol92 написал:
если поблизости нет котов
:D  
 
Цитата
sokol92 написал:
(если поблизости нет котов).
коты котам розь:-) Юра, ничего что без рыбы и мальченка подрос?  :-)

Цитата
sokol92 написал:
(надеюсь, с моей подачи
Владимир, да. Я правда предпочитаю debug.print, что протворечит воспитанию формулиста :-), но тут понятнее для других MSGBOX

Цитата
DNC По сути: с ЕСЛИ я уже получил необходимый ответ... но меня заинтересовал Ваш ответ на счет УФ.
Я правильно понял, что при наличии галочки "остановить если истина" все формулы в правилах, расположенных ниже не пересчитываются?
или быть может они не пересчитываются только в тех правилах, которые совпадают диапазонами?
или все-же пересчитываются, но без применения  указанных в правилах форматов?
Ну тест показывает, что именно так, все что ниже выполнившегося условия не пересчитывается.
УФ применяется к каждой ячейке диапазона столько раз сколько ячеек раздельно. Соответственно, если в одной ячейке выполнилось первое по списку условие , а во второй второе, то для первой второе и дальнейшие условия не считаются, а для второй, и первое и второе.
Изменено: БМВ - 14.10.2018 21:29:38
По вопросам из тем форума, личку не читаю.
 
Офф
Цитата
Юрий М написал:
Мотя , по какому случаю ребрендинг? ))
да волна пошла, вот и Тезка тоже сменил , надеюсь не я к этому подтолкнул своей сменой :-)
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх