Фильтровать массив по формуле (без VBA) - PullRequest
19 голосов
/ 27 июня 2011

Можно ли отфильтровать массив по одной формуле (без автофильтра, VBA или дополнительных столбцов)?

Например, у меня есть следующая таблица:

   A  | B     | C
 --------------------
1| ID | Class | Value
2| 1  | A     | V1
3| 1  | B     | V2
4| 2  | A     | V3
5| 3  | B     | V4
6| 3  | B     | V5

Я хочу использовать подмножество этого массива в VLOOKUP. А именно, я хочу сравнивать только те строки, где класс - «B». Поэтому я надеялся, что смогу использовать что-то вроде следующего

=VLOOKUP(A3, FILTER_FUNC(A:C, B="B"), 3, false)

где FILTER_FUNC - это некоторый тип функции или выражения, которое возвращает массив, содержащий только те строки, которые удовлетворяют условию.

Ответы [ 3 ]

16 голосов
/ 27 июня 2011
=VLOOKUP(A2,IF(B1:B3="B",A1:C3,""),1,FALSE)

Ctrl+Shift+Enter для ввода.

4 голосов
/ 27 июня 2011

Это будет сделано, если вам нужно только первое значение «B», вы можете добавить адрес ячейки для «B», если хотите сделать его более общим.

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(B2:B6)="B",0)),1)

Чтобы использовать это на основена двух столбцах, просто объединить внутри матча:

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(A2:A6&B2:B6)=("3"&"B"),0)),1)
1 голос
/ 27 июня 2011

Звучит так, будто вы просто пытаетесь выполнить классический поиск по двум столбцам.http://www.dailydoseofexcel.com/archives/2009/04/21/vlookup-on-two-columns/

Тонны решений для этого, наиболее простым, вероятно, является следующее (для которого не требуется формула массива):

=SUMPRODUCT((Lookup!A:A=Param!A1)*(Lookup!B:B=Param!B1)*(Lookup!C:C))

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

=SUMPRODUCT((A1:A3=A2)*(B1:B3="B")*(C1:C3))
...