FILTERは行のフィルタリングによく使われますが、列をフィルタリングすることもできます。

この例では、ブール代数とも呼ばれるブール論理を用いて、必要な配列を構築します。

ブール代数では、乗算が AND 論理に、加算が OR 論理に対応します。図の例では、ブール代数と OR 論理 (加算) を使用して、次のように A、C、E の列のみを対象としています。

{TRUE,FALSE,FALSE,FALSE,FALSE,FALSE}+{FALSE,FALSE,TRUE,FALSE,FALSE,FALSE}+{FALSE,FALSE,FALSE,FALSE,TRUE,FALSE}

数学の演算(加算)では、TRUEとFALSEの値を1と0に変換するので、次のような演算を考えることができます。

{1,0,0,0,0,0}+{0,0,1,0,0,0}+{0,0,0,0,1,0}

最終的には、1と0の横一列の配列ができあがります:

{1,0,1,0,1,0}

これをそのままFILTER関数にinclude引数として渡します。

=FILTER(B5:G12,{1,0,1,0,1,0})

ソースデータには6つの列があり、配列には6つの値があり、すべて1または0であることに注意してください。 FILTER は、この配列をフィルターとして使用し、ソース データから列 1、3、および 5 のみを含めます。 列2、4、6は削除されます。

MATCH 関数を使用する

上記のように OR 論理を足し算で適用することはうまくいきますが、拡張性がなく、ワークシートの値の範囲を基準として使用することができません。 別の方法として、MATCH関数とISNUMBER関数を併用することで、より効率的にinclude引数を構成することができます:

=FILTER(B5:G12,ISNUMBER(MATCH(B4:G4,{"a","c","e"},0)))

MATCH関数は、図のように配列定数{"a", "c", "e"}の中のすべての列のヘッダーを探すように構成されています。 このようにしたのは、MATCHの結果が、6列を含むソースデータと互換性のある寸法になるようにするためです。 また、MATCHの3番目の引数がゼロに設定されており、完全に一致するようになっていることにも注目してください。

MATCHが実行されると、次のような配列が返されます:

{1,#N/A,2,#N/A,3,#N/A}

この配列はISNUMBERに直接入り、別の配列を返します:

{TRUE,FALSE,TRUE,FALSE,TRUE,FALSE}

上記のように、この配列は横長で、カンマで区切られた6つの値を含みます。 FILTERは、この配列を使って、2列目、4列目、6列目を削除します。

範囲を使用する場合

列のヘッダーはすでにワークシート上の範囲 I4:K4 にあるので、上記の式は次のように範囲を直接使用するように簡単に変更できます。

=FILTER(B5:G12,ISNUMBER(MATCH(B4:G4,I4:K4,0)))

範囲 I4:K4 は {"a", "c", "e"} として評価され、上の式の配列定数と同じように動作します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です