У меня есть длинная формула со следующей структурой:
=IF(!X!<>0,!X!+A1,"")
где ! х! это очень длинная формула.
Есть ли решение, чтобы избежать повторения! X! дважды? Мне это нужно по двум причинам:
- Сделать формулу удобочитаемой для пользователя листа
- Сократить время процесса
Я ценю любую помощь.
Спасибо дио
To reduce the process time
то, очевидно, вам нужно где-то сохранить результат, в противном случае Excel должен пересчитать значение снова, когда условие совпадет. Деление тоже очень дорогая операцияОтветы:
Другой подход заключается в использовании двойной инверсии :
Если really_long_formula принимает значение 0 , вы получите деление на ноль и
IFERROR()
будет поймать его!Обратите внимание, что обычный способ (и лучший способ) выполнить это требование - использовать вспомогательную ячейку.
источник
1/1/x
несколько раз проверял в Excel 100 000 случайных чисел, и только в 1,4% случаев была ошибка округления. Максимальная относительная погрешность, которую я когда-либо нашел, была 1.6e-16, что, ну, фактически, ноль. Кроме того, что интересно, целые числа никогда не отображали ошибок округления (тестировалось несколько диапазонов от 0 до 1e14). Таким образом, этот ответ может быть осужден с точки зрения чистоты / чистоты, но не с точки зрения практических расчетов.Очевидный ответ - поместить формулу в рабочую ячейку подальше от основного листа. Например, если вы используете
H1
, установите его на:Ваша формула тогда становится:
Это типично для того, что можно делать на любом другом языке программирования.
источник
1/(1/x)
не всегда точно такую жеx
), особенно если вы имеете дело с целочисленными данными. Это также не применимо в более общем смысле (например, проверка на значение меньше нуля). (Комментарий скрещен с @ LưuVĩnhPhúc под принятым ответом.)Вам действительно нужен результат, чтобы оказаться
""
в ложном деле? Если вам нужно, чтобы ячейка выглядела пустой (например, вы не будете использовать что-то похожее=ISNUMBER()
на нее позже), вы можете использовать условное форматирование, чтобы скрыть содержимое в ложном регистре.Условный формат , который вы будете применять к клетке так , чтобы она не отображает ничего есть пользовательский формат
""
, как это (это на португальском языке , но вы получите идею):Формула в ячейке будет, как и ожидалось, просто
=!X!+A1
.Формула условного форматирования может быть
=!X!=0
, но это приведет к пересчету!X!
, который вам не нужен (ваша «точка 2»). Лучше использовать саму ячейку, используя=B1=A1
(предположим, что наша ячейка B1 ) - это подразумевает!X! = 0
.Даже если вам нужно, чтобы содержимое ячейки было на самом деле
""
, обычно в таблицу можно вносить незначительные изменения, чтобы можно было использовать этот подход. Если это так, оставьте комментарий с описанием ситуации.источник
Если вы не можете добавить вспомогательный столбец , почему бы не добавить весь лист? Есть несколько преимуществ для этого:
=IF(X<>0,X+A1,"")
D5
.helper!D5
на основном листе.Недостатки, которые я вижу:
sheetname!D5
не простоD5
.Взвешивая преимущества и недостатки, я думаю, что для многих вариантов использования это хорошее решение. Существуют ситуации, когда это не оптимально, хотя я не могу придумать ни одного в данный момент.
источник
еще не предложенный вариант - создать пользовательскую функцию. Вам нужно будет включить вкладку «Разработчик» в строке меню (google it) и создать модуль.
В строке формул вы бы сделали
ПРИМЕЧАНИЕ. Теперь он становится файлом .xlsx (с макросами) и может нуждаться в дополнительных разрешениях в корпоративной сети, поскольку макросы можно использовать в злонамеренных целях, и некоторые фильтры электронной почты блокируют их. Функции недокументированы, поэтому вам нужно будет предоставить примечания о том, что делают ваши функции, и я считаю полезным вызывать все мои функции udf_xxxxx, чтобы было ясно, что это не встроенная функция
Есть и другие GOTCHA с UDF. Смотрите эту ссылку для некоторых хороших советов http://www.decisionmodels.com/calcsecretsj.htm
источник