いきなり答える備忘録

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

(Gスプレッドシート)表のn列目以外を抽出する

 Googleスプレッドシートで、表(指定範囲)のうち左から数えてn列目以外の内容を取得する方法についてです。
 除外する列を複数指定することもできます。

  • FILTER関数と他の関数を組み合わせて、左からn列目(複数指定可)以外の列だけを抽出できます。

手順

1つの列を除いて抽出する場合

 次の画像で抽出の対象となっているのはC2:I5の範囲です(名前の列を含まず、日付の見出しを含んでいる点に注意)。
 C7セルに関数式を入力し、この範囲のうち3列目以外を抽出しています。

 C7セル

=FILTER(C2:I5,SEQUENCE(1,COLUMNS(C2:I5))<>3)

 「SEQUENCE(1,COLUMNS(C2:I5))」の部分により、「1から『C2:I5の列数』までの数列」を生成しています。つまり{1,2,3,4,5,6,7}を生成しています。
 そしてFILTER関数を使い、「C2:I5の7つの列のうち、配列{1,2,3,4,5,6,7}の3以外に対応する列」を抽出しています。
 結果的にC,D,F,G,H,I列が抽出されます。
 慣れないうちはFILTER関数のこういう働きが離れ業的に見えてしまいますが、とても便利です。

複数の列を除いて抽出する場合

 対象とするデータは上記の例と同じです。
 C7セルに関数式を入力し、C2:I5の範囲のうち2,5,6列目以外を抽出しています。

 C7セル

=FILTER(C2:I5,
COUNTIF({2,5,6},SEQUENCE(1,COLUMNS(C2:I5)))=0
)

 上記の例の延長で条件を増やしていく方法もありますが、除外する列数が増えると式が長くなります。
 そこで「COUNTIF({2,5,6},SEQUENCE(1,COLUMNS(C2:I5)))」の部分により、「配列{2,5,6}の中に配列{1,2,3,4,5,6,7}のそれぞれの数値がいくつあるか」をカウントしています。この部分により配列{0,1,0,0,1,1,0}が得られます。
 あとはFILTER関数を使い「C2:I5の7つの列のうち、配列{0,1,0,0,1,1,0}の0に対応する列」を抽出しています。
 結果的にC,E,F,I列が抽出されます。

「n行目」以外の抽出について

 行/列の方向が異なるだけで、やり方としては全く同じように抽出できます。
 具体的には次の記事で紹介しています。

www.officeisyours.com