いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

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

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

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

手順

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

 次の画像で抽出の対象となっているのはB3:D10の範囲です(見出しを含んでいない点に注意)。
 F3セルに関数式を入力し、この範囲のうち3行目以外を抽出しています。

 F3セル

=FILTER(B3:D10,SEQUENCE(ROWS(B3:D10))<>3)

 「SEQUENCE(ROWS(B3:D10))」の部分により、「1から『B3:D10の行数』までの数列」を生成しています。つまり{1;2;3;4;5;6;7;8}を生成しています。
 そしてFILTER関数を使い、「B3:D10の8つの行のうち、配列{1;2;3;4;5;6;7;8}の3以外に対応する列」を抽出しています。
 結果的に範囲のうち上から3行目以外の行がすべて抽出されます。

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

 データは上記の例と同じです。
 F3セルに関数式を入力し、B3:D10の範囲のうち3,4,7行目以外を抽出しています。

 F3セル

=FILTER(B3:D10,
COUNTIF({3;4;7},SEQUENCE(ROWS(B3:D10)))=0
)

 上記の例の延長でAND条件を増やしていく方法だと式が長くなりますので対策を講じています。
 「COUNTIF({3;4;7},SEQUENCE(ROWS(B3:D10)))」の部分により、「配列{3;4;7}の中に、配列{1;2;3;4;5;6;7;8}のそれぞれの数値がいくつあるか」をカウントしています。この部分により配列{0;0;1;1;0;0;1;0}が得られます。
 あとはFILTER関数を使い「B3:D10の8つの行のうち、配列{0;0;1;1;0;0;1;0}の0に対応する行」を抽出しています。
 結果的に範囲のうち上から3,4,7行目以外の行がすべて抽出されます。
 ちなみに式中の「{3;4;7}」は配列の方向を意識してこのように表記しています(3行1列の行列となる)が、「{3,4,7}」(1行3列の行列)でも同じ結果になります。

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

 全く同じ考え方で列の抽出が可能です。
 具体的には次の記事で紹介しています。

www.officeisyours.com