Альтернативные способы или переписать вашу формулу:
=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")
Так меньше отслеживания сторон и возврата к точке (не уверен, сколько мне нужнорасширить до!).
Глядя на таблицу выше, вы заметите в желтой области все возможные комбинации для ПУСТО и НЕ ПУСТО.в списке.Если вы затем присваиваете значение столбцу таким же образом, как двоичные числа (строка примечания 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.