Шукаєте рішення для скорочення формули IF


9

У мене довга формула з такою структурою:

=IF(!X!<>0,!X!+A1,"")

куди ! X! це дуже довга формула.

Чи є рішення, щоб не повторювати! X! двічі? Мені це потрібно з двох причин:

  1. Щоб зробити формулу читабельною для користувача аркуша
  2. Щоб скоротити час процесу

Я вдячний за будь-яку допомогу.

Спасибі, Діо


1
якщо ви хочете, To reduce the process timeтоді, очевидно, вам доведеться десь зберігати результат, інакше Excel повинен перерахувати значення ще раз, коли умова відповідає. Відділення також дуже дорога операція
phuclv

2
Просто цікаво, чи ви "гольфували" довгу формулу вниз скільки завгодно? Щоб скоротити його, можливо, додайте названі діапазони?
BruceWayne

Щоб зробити довгу формулу більш зрозумілою, розділіть аргументи на різні рядки, використовуючи alt + return. Недоліком є ​​лише те, якщо користувач не збільшує висоту рядка формули, формула виглядає неповною.
Бред Сміт

Відповіді:


12

Інший підхід полягає у використанні подвійної інверсії :

=IFERROR(1/(1/really_long_formula)+A1,"")

Якщо really_long_formula приймає значення 0 , ви отримаєте розподіл на нуль і IFERROR()буде зловити його!

Зверніть увагу, що звичайний спосіб (і найкращий спосіб) впоратися з цією вимогою - це клітина-помічник.


7
це може постраждати від точності, втраченої через поділ з плаваючою комою
phuclv

3
@ LưuVĩnhPhúc Ви абсолютно правильні! AFH підхід є найкращим підходом!
Студент Гері

Це приємна, брудна хитрість. Я б сильно утримався від його використання, але, в крайньому випадку, хто знає?
Андре Шалелла

3
ПРИМІТКА. Це правда, що може бути певна втрата точності, але це рідко є актуальною проблемою. Я 1/1/xкілька разів тестував 100 000 випадкових чисел в Excel, і лише в 1,4% випадків була помилка округлення. Максимальна відносна похибка, яку я коли-небудь знаходив, була 1.6e-16, що, ну, фактично дорівнює нулю. Також цікаво, що цілі числа ніколи не відображали помилок округлення (тестували кілька діапазонів від 0 до 1e14). Таким чином, ця відповідь може бути химерною з точки зору чистоти / чистоти, але не з точки зору практичного розрахунку.
Андре Шалелла

1
Я вважаю рішення Гері найкращим. По-перше, тому що вона чиста (як згадував також Андре) та читається іншими користувачами. По-друге, тому що вона задовольняє мою потребу. У мене немає складних чи довгих цілих чисел. Я сподіваюся, що користувачі, які вибирають такий підхід, прочитають коментарі, щоб розчутись про плюси та мінуси цього рішення.
Dio

23

Очевидна відповідь - помістити формулу в робочу клітинку, подалі від основного аркуша. Наприклад, якщо ви використовуєте H1, встановіть його на:

=!X!

Тоді ваша формула стає:

=IF(H1<>0,H1+A1,"")

Це характерно для того, що можна зробити в будь-якій іншій мові програмування.


У мене немає можливості додати стовпчик довідки. Все одно, дякую.
Dio

2
@Dio, якщо його не слід бачити, то просто схойте стовпець. Ви навіть можете назвати стовпчик / діапазон, щоб полегшити його читання
phuclv

4
@Dio - Гаразд. Ваша прийнята відповідь досить розумна, але пам’ятайте, що через округлення ви можете втратити точність ( 1/(1/x)не завжди точно така ж, як x), особливо якщо ви маєте справу з цілими даними. Він також не застосовується більш загально (наприклад, перевірка на менший за нуль). (Коментар схрещений з @ LưuVĩnhPhúc під прийнятою відповіддю.)
AFH

Дякуємо за ваші поради та коментарі. Я залишаю питання відкритим, щоб побачити, чи є ще нові пропозиції.
Dio

2
Було б корисно переглянути довгу формулу. Окрім робочої комірки, можна визначити ім’я на робочому аркуші, який містить формулу
datatoo

3

Вам справді потрібен результат, щоб бути ""у помилковій справі? Якщо вам потрібна лише клітинка, щоб вона виглядала порожньою (наприклад, ви не будете використовувати щось подібне =ISNUMBER()на ній пізніше), ви можете використовувати умовне форматування, щоб приховати вміст у помилковому випадку.

Умовний формат , який ви будете застосовувати до клітки так , щоб вона не відображає нічого є призначений для користувача формат "", як це (це на португальською мовою , але ви отримаєте ідею):

нестандартний формат для порожніх комірок

Формула в комірці буде, як очікується, просто =!X!+A1.

Формула умовного форматування може бути =!X!=0, але це змусить перерахунок !X!, якого ви не хочете (ваш "Точка 2"). Краще використати саму клітинку, використовуючи =B1=A1(припустимо, що наша клітина B1 ) - це означає !X! = 0.

Навіть якщо вам потрібен вміст комірок, ""на робочому аркуші зазвичай можуть бути внесені незначні зміни, щоб можна було використовувати цей підхід. Якщо це так, залиште коментар з описом ситуації.


1

У мене немає можливості додати стовпчик довідки. Все одно, дякую.

Якщо ви не можете додати стовпець- помічник , чому б не додати цілий робочий аркуш? У цьому є кілька переваг:

  • Ваша допоміжна клітина не займає місця, яке в іншому випадку може бути використане, оскільки це знаходиться в окремому робочому аркуші.
  • Ви можете назвати клітинку, а потім адресувати її по імені, наприклад=IF(X<>0,X+A1,"")
  • Якщо вам потрібно зробити це в декількох клітинках, ви можете:
    1. Перейменуйте робочий аркуш помічника "помічник"
    2. Помістіть рівняння помічника в ту саму клітинку, що і основне рівняння (назвемо це D5.
    3. Адресуйте клітинку, як helper!D5на головному аркуші.
  • При необхідності можна приховати допоміжний лист.
  • Це швидше, ніж оцінювати двічі.
  • Він не втрачає точності.

Недоліками, які я бачу, є:

  • Ви повинні посилатися на неназвані комірки на головному аркуші, sheetname!D5а не просто як D5.
  • Тепер формула складається з двох частин замість однієї.
  • Поширення робочого листа.

Зважуючи переваги та недоліки, я думаю, що для багатьох випадків використання це хороше рішення. Існують ситуації, коли це не оптимально, хоча наразі я не можу придумати жодної.


1
Чудова відповідь. Недоліки , які я бачу: 1. Це не допомагає багато з робити розрахунок простий для користувача, так як тепер велика формула захована. 2. Багато робочих зошитів вже переповнені аркушами. Навіть якщо ви приховуєте це, вам, можливо, доведеться пройти безліч прихованих аркушів, щоб його сховати. Крім цього, це хороше рішення.
Андре Шалелла

@ AndréNeves Дякую за це! Перший мій припав мені на думку, але я забув це, коли писав розділ про недоліки .
wizzwizz4

1

Ще не запропонований варіант - створити визначену користувачем функцію. Вам потрібно буде включити вкладку Developer на панелі меню (google it) та створити модуль.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

На панелі формул ви б тоді зробили

=udf_myCalc(A1)

ПРИМІТКА. Тепер це стає файлом .xlsx (з макросами) і може знадобитися додаткові дозволи в корпоративній мережі, оскільки макроси можуть використовуватися в зловмисних цілях, а деякі фільтри електронної пошти заблокують їх. Функції недокументовані, тому вам потрібно буде надати примітки про те, що виконують ваші функції, і я вважаю корисним називати всі мої функції udf_xxxxx, щоб було зрозуміло, що це не вбудована функція

Є ще деякі GOTCHA з UDF. Дивіться за цим посиланням кілька корисних порад http://www.decisionmodels.com/calcsecretsj.htm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.