いきなり答える備忘録

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

(Gスプレッドシート)SORTとFILTER関数を組み合わせる例と注意点

 GoogleスプレッドシートでSORT関数での並べ替えとFILTER関数での抽出を同時に行う例と注意点についてです。

  • SORT/FILTER関数の併用時に関数の順序や引数の指定が適切でないと、エラーや意図しない結果になる場合があります。

成功例と失敗例

 まずはうまくいったときの例です。
 次の画像では左側の表から出身地が「大阪府」であるものを抽出し、身長の降順(大きい順)で並べ替えています。

 F3セル

=SORT(FILTER(B3:D10,C3:C10="大阪府"),3,FALSE)

 内側のFILTER関数によって出身地が大阪府であるもの抽出し、それをSORT関数の第1引数とすることで並べ替えを実現しています。
 SORT関数の第2引数(並べ替えキー)は「3」とし、つまり第1引数(FILTER関数により抽出されたデータ)の左から3列目を用いる、という指定を行っています。SORT関数の第3引数「FALSE」は降順で並べ替えるという意味です。



 ではどういう失敗が考えられるかですが、次のような例があります。

 F3セル(エラー)

=SORT(FILTER(B3:D10,C3:C10="大阪府"),D3:D10,FALSE)

 式の内容はほぼ上記の例と同じですが、SORT関数の第2引数(並べ替えキー)の指定に元のデータのセル範囲「D3:D10」(身長が記された範囲)を使用しています。
 このようにセル範囲で指定する方法自体は誤りではないのですが、FILTER関数によってデータを4行に絞り込んでいるのに並べ替えキーとして8つの値を指定する状態となっています。結果的にSORT関数のエラーとなります。



 次の画像はエラーにはならないものの、意図しない誤った結果となる例です。

 F3セル(誤り)

=FILTER(SORT(B3:D10,D3:D10,FALSE),C3:C10="大阪府")

 FILTER関数の方を外側に置き、SORT関数で並べ替えた結果に対しフィルタをかけようとしています。
 しかしフィルタの条件を「C3:C10="大阪府"」という並べ替え前のデータに基づく条件としているため、「並べ替えられたデータを並べ替え前のデータに基づきフィルタしている」という状態になります。最初の例のような行数の食い違いが生じないのでエラーにはなりませんが、意味のない結果になります。



 まとめると、次のような点を意識する必要があるといえます。

  • SORT関数の並べ替えキーの指定方法には範囲参照を用いる方法と列番号(インデックス)を用いる方法がある
  • FILTER関数の条件設定には列番号(インデックス)を使えない
  • 並べ替え対象、並べ替えキー、抽出対象範囲、抽出条件範囲が正確に対応付けられているか把握する必要がある

QUERY関数での実行例

 代案の一種として、次の画像ではQUERY関数を使うことで最初の成功例と同じ結果を得ています。
 F2セルに式を入力して見出しごと取得している点に注意してください。

 F2セル

=QUERY(B2:D10,"WHERE C='大阪府' ORDER BY D DESC",1)

 第2引数内のWHERE句で抽出を、ORDER BY句で並べ替えを行っています。QUERY関数は句の順番などの制限は厳しいですが、もともとこうした組み合わせを前提にしているだけあって無意味な結果を返す心配がありません。