2015-03-09 2 views
0

У меня есть таблица, которая выглядит как на картинке ниже. У меня есть некоторые формулы, которые выполняют подсчеты на этом листе и сравнивают эти данные с другим источником данных. Примером может быть один из них:Формула массива для возврата списка на основе нескольких условий

=Countifs(A2:A10676,"0",C2:C10676,"OPEN",D2:D10676,"Current") 

Как мне вернуть список номеров займов, связанных с подсчетом? Например, счет выше возвращает 3038. Я попробовал следующую формулу. Я выбрал C2: C3039, ввели формулу и нажмите Shift, + Ctrl + Введите:

=If(And(A2:A10676="0",C2:C10676="OPEN",D2:D10676="Current"),B2:B10676,"") 

Моя мысль была, что это оценивает логическое для каждой строки и создает массив значений в столбце B. Когда я вхожу в это, каждая ячейка массива пуста.

Может кто-нибудь объяснить, как вернуть массив со значениями, основанными на нескольких критериях?

enter image description here

ответ

3

Я вижу две проблемы с формулой

=If(And(A2:A10676="0",C2:C10676="OPEN",D2:D10676="Current"),B2:B10676,"")

Во-первых, вы не можете использовать AND возвращать массив - и (как OR) возвращает один результат (TRUE или FALSE), так что вам нужно либо вложенный МСФ или использовать * для имитации AND, т.е. либо

=IF(A2:A10676=0,IF(C2:C10676="OPEN",IF(D2:D10676="Current",B2:B10676,"")))

.... или .....

=IF((A2:A10676=0)*(C2:C10676="OPEN")*(D2:D10676="Current"),B2:B10676,"")

Примечание: Я использовал 0 без кавычек для первых критериев - для COUNTIFS вы можете использовать «0» или 0, но здесь она должна соответствовать типу данных - только использовать кавычки, если данные текст отформатирован - Я предполагаю, что это не так.

Вторая проблема заключается в том, что для обоих из них результирующий массив все еще имеет 10675 значений, поскольку он по-прежнему включает все пробелы для строк, когда критерии не выполняются.

Чтобы получить массив только 3038 значений, которые вы можете использовать эту формулу массив вошел в диапазон правильного размера:

=INDEX(B2:B10676,SMALL(IF(A2:A10676=0,IF(C2:C10676="OPEN",IF(D2:D10676="Current",ROW(B2:B10676)-ROW(B2)+1)),ROW(INDIRECT("1:"&E2))))

Где E2 содержит ваш COUNTIFS формулы

Обратите внимание, что это работает только вернуть массив в диапазон рабочих листов - он не будет работать, чтобы вернуть массив, который будет использоваться в другой функции

+1

Спасибо! Это именно то, что я искал. Нет 'And()' или 'Or()' в массивах, хорошо знать ... – Kyle

2

Вот такой подход, который использует "вспомогательный столбец", а не формулу массива:

enter image description here

В Е2 ввести формулу:

=IF(AND(A2=0,C2="OPEN",D2="Current"),1+MAX($E$1:E1),"") 

и скопируйте (это отмечает несколько строк удовлетворение критериев)

В F2 введите:

=IFERROR(INDEX(B$2:B$24,MATCH(ROWS($1:1),$E$2:$E$24,0)),"") 

и скопировать вниз.

enter image description here

1

Вы можете установить фильтр данных:

Dim wrk As Worksheet 
Set wrk = ActiveSheet 
If Not wrk.AutoFilterMode Then wrk.range("a1").AutoFilter 
wrk.range("a1").AutoFilter field:=1, Criteria1:="0" 
wrk.range("a1").AutoFilter field:=3, Criteria1:="OPEN" 
wrk.range("a1").AutoFilter field:=4, Criteria1:="Current" 
Set wrk = Nothing 

Конечно, вы можете вручную включить фильтры, как вы хотите, тоже.

+0

С более чем 10 тыс. Строк количество * может быть проблемой. – pnuts

1

Вставьте четыре пустых строки сверху, скопируйте A5 : D6 в A1 и удалить B2. DATA> Сортировка & Фильтр, Дополнительно, Скопируйте в другое место, Диапазон списка: A5:D10680, Диапазон критериев: A1:D2, Скопируйте по ссылке: F1:I1, проверьте только уникальные записи.