вложенный, если расчет в Excel - PullRequest
0 голосов
/ 11 октября 2018

У меня есть столбец I в качестве столбца вычисления, и это то, что я сейчас написал.и это ничего мне не дает.

=IF(B2<>""&D2<>"",B2*D2,IF(B2<>""&D2=""&C2<>"",B2*C2,IF(A2<>""&C2<>""&AND(B2&D2=""),A2*C2,IF(A2<>""&C2=""&D2<>""&B2="",A2*D2,A2*C2))))

Логика такова, что если B2 и D2 не равны нулю, умножьте b2 * d2

, если B2 не равен нулю, а D2 не равен нулю, то b2 * c2

Если B2 нулевой, а D2 не нулевой, то a2 * d2

иначе a2 * c2

Есть ли способы заставить этот код работать?

Спасибо

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Альтернативные способы или переписать вашу формулу:

=IF(AND(B2<>"",D2<>""),B2*D2,IF(D2="",IF(B2<>"",B2*C2,A2*C2),IF(D2<>"",A2*D2,A2*C2)))

=IF(AND(B2<>"",D2<>""),B2*D2,IF(AND(B2="",D2=""),A2*C2,IF(D2="",B2*C2,A2*D2)))

Они будут иметь незначительную разницу в производительности, а что нет.Ответ Брюса Уэйна, вероятно, более читабелен с точки зрения следования вашей логике, и поэтому его легче поддерживать или понимать в будущем.Приведенные выше ответы должны дать те же результаты, но на несколько символов короче.

И в качестве дурацкой альтернативы для нестандартного мышления:

=CHOOSE(SUM((B2<>"")*2+(D2<>""))+1,A2*C2,A2*D2,B2*C2,B2*D2)

Расширение (не только моя талия)size)

У меня было время на руках, поэтому я дурачился с концепцией ИСТИНА и ЛОЖЬ, равной 1 и 0 при отправке через математическую операцию.Когда я начал искать варианты, это напомнило мне, как работает двоичное число.Не то чтобы я слишком много думал об этом, но я думаю, что это работает, потому что параметры для каждой ячейки являются двоичными или ИСТИНА / ЛОЖЬ.Поскольку каждая возможная комбинация была покрыта уникальным результатом, мне просто пришлось придумать формулу, которая дала бы уникальные результаты.В этом случае я просто использовал метод преобразования двоичных чисел.Ключ равен ИСТИНА = 1 после математической операции и ЛОЖЬ = 0. Теперь движение в другом направлении не совсем то же самое, но, как сказал Джипед, 0 - ЛОЖЬ, а все остальное - ИСТИНА.поэтому 3, -3 и 3.14 все обрабатываются как ИСТИНА, если в качестве результата логической проверки используются числовые значения.

=IF(3.14,"THIS NUMBER IS TRUE","ONLY 0 IS FALSE")

Так меньше отслеживания сторон и возврата к точке (не уверен, сколько мне нужнорасширить до!).

Example Table

Глядя на таблицу выше, вы заметите в желтой области все возможные комбинации для ПУСТО и НЕ ПУСТО.в списке.Если вы затем присваиваете значение столбцу таким же образом, как двоичные числа (строка примечания A), вы можете начать генерировать все возможные числа

Я начал с создания списка, который мне нужен в E2: E5 для чисел, которыеВЫБРАТЬ можно работать с.Я предполагал, что 0 побьет ВЫБОР и вызовет сбой.Я знал, что FALSE+FALSE=0, и я также знал, что TRUE+TRUE=2 и что оба TRUE+FALSE=1 and FALSE+TRUE=1.Мне нужен был способ отличить два последних, и я знал, что мне нужно всего 4 результата.Это когда бинарный подсчет / преобразование, как вы хотите назвать, включается. Я поместил следующую формулу в D2 и скопировал

=SUM((A2<>"")*2+(B2<>""))
Note the brackets around the logic check and
that the logic checks are sent through a math
operation before being summed.    

technically speacking it is really:
=SUM((A2<>"")*2+(B2<>"")*1)

however the *1 is not needed

, как только у меня сгенерировался этот список, это был простой +1, добавленный кчтобы попасть в диапазон от 1 до 4, показанный в E2: E5.

Теперь, когда у меня был способ генерации индексного номера, единственное, что осталось сделать, это сопоставить требуемые результаты / формулу с правымкомбинация.

=CHOOSE(SUM((A2<>"")*2+(B2<>""))+1,"A","B","C","D")

Ну, я чувствовал себя так, будто немного побил там мертвую лошадь, так что, если я перебиваю, извиняюсь.Если что-то все еще отсутствует, попросите дополнительное объяснение.

UPDATE TID BIT

ЕСЛИ было больше столбцов для проверки, возможно, можно изменить формулу выбора, просто добавив следующее двоичное значение встолбец и убедитесь, что в списке выбора есть соответствующее количество результатов.Должно быть 2 ^ (число проверяемых столбцов) вариантов

=CHOOSE(SUM((A2<>"")*4+(A2<>"")*2+(B2<>""))+1,"A","B","C","D","E","F","G","H")

Какой тип превосходит несколько вложенных IF для краткости, но я думаю, что мне легче понять вложенные IF.

0 голосов
/ 11 октября 2018

Вы, кажется, смешиваете операторы из других языков программирования:
В Excel:

AND : binary operator : AND(TRUE, FALSE) => FALSE
&   : concatenation   : "Hello " & "World" => "Hello World"
0 голосов
/ 11 октября 2018

Вы должны использовать AND():

=IF(AND(B2<>"",D2<>""),B2*D2,IF(AND(B2<>"",D2=""),B2*C2,IF(AND(B2="",D2<>""),A2*D2,A2*C2)))
...