2

Я не новичок в Excel или VBA; Тем не менее, у меня есть некоторые трудности с отсутствием логической функции "или" в Excel. Как вы знаете, функция «&» работает нормально, но вы не можете вставить «|» или "||" оператор в формулу. Есть ли альтернатива, которая даст мне "или"?

Примечание. Предопределенное "или функция" (т. Е. [Или (условие 1, условие 2 ...)] в этом случае не помогает. Он оценивает значения в другом наборе ячеек, а не в текущей ячейке, и возвращает "истину" или "ложь" вместо числового значения.

В настоящее время я использую следующий код:= IF(IFERROR(INDEX($ H $ 2:INDIRECT("H" & ROW()- 1), MATCH(7, $ D $ 2:INDIRECT("D" & ROW())-1), 0)), 0)= 99,(ДВССЫЛ ("F" & ROW())* 2), ДВССЫЛ ("F" & ROW()))

Значение "7" в настоящее время сопоставляется. Мне нужно, чтобы он соответствовал нескольким значениям, таким как Match (5 | 6 | 7, ... или Match (5 || 6 || 7, ...

Какие-нибудь яркие идеи?

3 ответа3

2

Предполагая, что вы хотите сопоставить 5 , 6 или 7 и найти первую соответствующую строку для любого из тех, вы можете использовать эту формулу

=IF(IFERROR(INDEX($H$2:INDIRECT("H"&ROW()-1),AGGREGATE(15,6,MATCH({5,6,7},$D$2:INDIRECT("D"&ROW()-1),0),1)),0)=99,2,1)*INDIRECT("F"&ROW())

Функция AGGREGATE существует только в Excel 2010 или более поздних версиях

Это работает, потому что часть MATCH теперь возвращает "массив" из 3 значений - по одному для 5, 6 и 7 - либо числовую позицию в диапазоне, либо #N/A если они не существуют в диапазоне, поэтому сопоставьте может вернуть этот результат

{#N/A,4,11}

Это означало бы, что 5 не найдено, 6 найдено в 4-й строке диапазона поиска и 7 найдено в 11-й строке.

Следовательно, функция AGGREGATE выглядит следующим образом:

AGGREGATE(15,6,{#N/A,4,11},1)

где 14 - это тип функции, которую нужно применить [ SMALL ], 6 означает, что она игнорирует ошибки, а 1 в конце определяет значение k для SMALL , поэтому в основном это просто наименьшее значение из {#N/A,4,11} игнорируя ошибки, поэтому в этом случае он возвращает 4, что соответствует первому совпадению для 5, 6 или 7

2

Это довольно неуклюже, но вы можете вкладывать операторы IFERROR в ваш INDEX/MATCH.

=INDEX(D:D,IFERROR(MATCH(5,D:D,0),IFERROR(MATCH(6,D:D,0),IFERROR(MATCH(7,D:D,0),""))))

ETA: По сути, это работает путем поиска 5, затем 6, а затем 7 в столбце D. Решение Барри в комментариях к этому ответу, вероятно, является лучшим ответом, чем этот.

1

Функция "ИЛИ b" - это просто объединенная функция функции «НЕ (И (НЕ (а); НЕ (б)))». Это дает следующее в результате, если вы используете это так.

A, ИСТИНА, ИСТИНА, ЛОЖЬ, ЛОЖЬ;

B, ИСТИНА, ЛОЖЬ, ИСТИНА, ЛОЖЬ;

функция, ИСТИНА, ИСТИНА, ИСТИНА, ЛОЖЬ;

Это может быть расширено, чтобы включить столько переменных, сколько вы хотите, но можете ли вы использовать его с функцией соответствия, это настоящий вопрос сейчас. Нужно больше деталей для эксперимента, и файл, если это возможно.

Вы можете просто сделать скрипт для этого, чтобы попробовать все значения с помощью простого цикла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .