いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)FILTER関数で指定した列だけ抽出する

 GoogleスプレッドシートのFILTER関数を使う際に、対象となる表のうち取得する一部の列を指定し、その中で条件を満たす行を抽出する方法についてです。

  • FILTER関数の第1引数内で抽出する列を直接指定しておけば、その指定した列だけを抽出できます。
  • 取得する列の見出し用意しておき、SCAN/LAMBDA関数を併用する方法もあります。

抽出の内容

 抽出の内容について確認します。
 画像にある5の列を持つ表(データ)のうち、赤枠で囲んだ3つの列だけを取得するものとし、さらに条件(「魔力」の値が70以上)をつけて行を抽出するものとします。

列見出しを参照しない方法

 H~J列を使って抽出を行っています。
 これらの列にも見出しを付けていますが、こちらの方法では列見出しを抽出に使用していません。
 具体的にはH3セルに次のような式を入力して抽出しています。

 H3セル

=FILTER({B3:C7,E3:E7},E3:E7>=70)

 第1引数を「{B3:C7,E3:E7}」としています。これによりフィルタをかける前の段階でB,C,E列だけを抽出の対象としています。
 非常にわかりやく、列見出しがない表でも同名の列がある表でも問題なく利用できるのがメリットです。



 第1引数の内容を書き換えれば取得する列の順番も入れ替えられます(もちろん見出しの書き換えは手動でやっています)。

 H3セル

=FILTER({B3:B7,E3:E7,C3:C7},E3:E7>=70)

列見出しを参照する方法

 こちらの方法ではH~J列の見出しを抽出の際に参照して、同名の列を取得しています。
 具体的にはH3セルに次のような式を入力しています。

 H3セル

=FILTER(
SCAN("",H2:J2,LAMBDA(x,y,FILTER(B3:F7,B2:F2=y))),
E3:E7>=70)

 ちょっと長いですが、2行目ではH2,I2,J2の3つの値(まとめてyと名付けています)それぞれを条件としてFILTER関数を3回実行し、3つの列を取得しています(FILTER関数で「列」を取得していることに注意)。
 さらに外側のFILTER関数でさらに「魔力」の値を条件とするFILTER関数を実行することで上記の結果を得ています。



 式はそのままで、H~J列の見出しを書き換えれば取得する列を入れ替えることができます。

 なお詳細は省略しますが、他に考えられる方法としてFILTER関数とCOUNTIF関数を組み合わせるといったものがあります。しかし指定する列の順番が元の表(データ)と揃っていないと誤った結果になるという難点があります。わかっていて使う分には問題ありませんが、こちらのやり方の方がその点で安全といえます。