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つを横に並べると、縦持ちの表ができます。
縦持ちにしておくと、SUMIFS や QUERY で自由に切り出せます。 横持ちのままだと、月が増えるたびに数式を直す必要があります。
複数シートをまとめる
同じ形のシートが並んでいる場合、{} で縦に結合するのが基本です。
={'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には無い
コメントを残す