FLATTEN関数の使い方|複数の列や行を1列にまとめる

執筆者:

カテゴリ:

FLATTENは、複数の行・列にまたがるデータを、1列にまとめる関数です。

横に広がった表を縦一列にしたい、複数の列をまとめて1つのリストにしたい——こうした「形を変える」処理に使います。

Excelにはありません。 スプレッドシート固有の関数です。

書式

=FLATTEN(範囲1, [範囲2], ...)

範囲はいくつでも並べられます。

基本の動き

A B C
1 東京 大阪 名古屋
2 福岡 札幌 仙台
=FLATTEN(A1:C2)

結果(縦一列): 東京 / 大阪 / 名古屋 / 福岡 / 札幌 / 仙台

行ごとに、左から右へ読んで縦に並べます。 読む順番はこの通りで固定です。

離れた範囲をまとめる

=FLATTEN(A1:A10, C1:C10, E1:E10)

3つの列が1列に連結されます。

縦に結合するだけなら {} でも書けます。

={A1:A10; C1:C10; E1:E10}

; が縦方向の結合です。範囲の列数が揃っているならこちらでも構いません。列数が揃っていない場合や、複数列を1列にしたい場合にFLATTENが必要になります。

空欄を除く

範囲を大きく取ると、空欄もそのまま結果に入ります。FILTER で除きます。

=FILTER(FLATTEN(A1:C100), FLATTEN(A1:C100)<>"")

FLATTENを2回書く必要があるのが冗長ですが、これが標準的な書き方です。

重複も除くなら UNIQUE を重ねます。

=UNIQUE(FILTER(FLATTEN(A1:C100), FLATTEN(A1:C100)<>""))

複数列に散らばった値から、重複なしの一覧を作る——これがFLATTENの最も実用的な使い方です。

横持ちを縦持ちに変換する

月ごとに列が伸びていく「横持ち」の表は、集計に向きません。FLATTENで縦持ちに直せます。

元の表(横持ち)

A B C D
1 支店 4月 5月 6月
2 東京 1200 1400 1300
3 大阪 800 950 900

縦持ちに変換する

支店の列(各支店を月数ぶん繰り返す):

=FLATTEN(A2:A3 & {"","",""})

& で3列に複製してからFLATTENしています。

月の列:

=FLATTEN(IF(A2:A3<>"", {B1:D1; B1:D1}, ""))

金額の列:

=FLATTEN(B2:D3)

3つを横に並べると、縦持ちの表ができます。

縦持ちにしておくと、SUMIFSQUERY で自由に切り出せます。 横持ちのままだと、月が増えるたびに数式を直す必要があります。

複数シートをまとめる

同じ形のシートが並んでいる場合、{} で縦に結合するのが基本です。

={'4月'!A2:C100; '5月'!A2:C100; '6月'!A2:C100}

空行が入るので FILTER で除きます。

=FILTER({'4月'!A2:C100; '5月'!A2:C100}, {'4月'!A2:A100; '5月'!A2:A100}<>"")

この用途ではFLATTENは使いません。FLATTENは「複数列を1列にする」ための関数で、「複数の表を縦に積む」のは {} の役割です。ここは混同しやすいので区別してください。

エラーの対処

#REF! が出る

結果の展開先にデータが入っています。 FLATTENは下方向に結果を広げるため、その領域が空いている必要があります。

空欄が大量に出る

範囲を大きく取りすぎています。FILTER<>"" を指定してください。

順番が想定と違う

FLATTENは行ごとに左から右の順で読みます。列ごとに読みたい場合は、TRANSPOSE で行列を入れ替えてから渡してください。

=FLATTEN(TRANSPOSE(A1:C2))

まとめ

  • – 書式は =FLATTEN(範囲)行ごとに左から右の順で1列にまとめる
  • – 空欄を除くには FILTER<>""
  • 複数列から重複なしの一覧を作るのが主な用途
  • 横持ちを縦持ちに変換できる。集計しやすい形になる
  • – 複数の表を縦に積むのは {} の役割。FLATTENとは別物
  • – Excelには無い

関連する関数

コメント

コメントを残す

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