web-dev-qa-db-ja.com

数式を使用して配列をフィルター処理する(VBAなし)

単一の式を使用して配列をフィルター処理することは可能ですか(オートフィルター、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は、条件を満たす行のみを含む配列を返す何らかのタイプの関数または式です。

19
J. Christian
=VLOOKUP(A2,IF(B1:B3="B",A1:C3,""),1,FALSE)

Ctrl+Shift+Enter を入力します。

16
GSerg

これは、最初の「B」値だけが必要な場合に実行されます。より汎用的にしたい場合は、「B」のセルアドレスをサブできます。

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

2つの列に基づいてこれを使用するには、一致内で連結します。

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(A2:A6&B2:B6)=("3"&"B"),0)),1)
4
Lance Roberts

古典的な2列のルックアップを実行しようとしているように聞こえます。 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))
1
Alain