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

執筆者:

カテゴリ:

FLATTEN関数の使い方・読み方のイメージ

配列・抽出

FLATTEN関数の使い方・読み方

Excel関数辞典

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

使える環境Excel✕Googleスプレッドシート○

Excelでは TOCOL(365)が同じ働きをします。

このページの中身(22項目)
  1. 書式
  2. 基本の動き
  3. 離れた範囲をまとめる
  4. 空欄を除く
  5. 横持ちを縦持ちに変換する
  6. 複数シートをまとめる
  7. エラーの対処
  8. 複数の範囲を一列にまとめる
  9. 空白セルの扱い
  10. 縦持ちへの変換に使う
  11. 使いどころの判断
  12. 横持ちの表を縦に組み替える手順
  13. そもそも縦持ちで受け取れないか
  14. 変換の前に確認すること
  15. 「配列・抽出」の関数を全体から見る
  16. 数式を書く前の手順
  17. どの関数でも共通する確認
  18. 引き継ぐときに残すこと
  19. このサイトの収録状況
  20. よくある質問
  21. まとめ
  22. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

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

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

FLATTEN関数の使い方の記事構成図
FLATTEN関数の使い方:この記事で扱う内容

書式

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

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

基本の動き

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

結果(縦一列)

東京 / 大阪 / 名古屋 / 福岡 / 札幌 / 仙台

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

FLATTEN関数の使い方の要点図
FLATTEN関数の使い方

離れた範囲をまとめる

=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で縦持ちに直せます。

元の表(横持ち)

ABCD
1支店4月5月6月
2東京120014001300
3大阪800950900

縦持ちに変換する

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

=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))

複数の範囲を一列にまとめる

複数の範囲を縦一列にまとめる処理は、集計の前段として意外に需要があります。

たとえば、月ごとに列が分かれている表があり、全月の値をまとめて一列にしたい場合。あるいは、複数の列に分散している担当者名を、一つの一覧にまとめたい場合。こうした要求に応えるのがこの関数です。

範囲を渡すと、その中の値が縦一列に並びます。複数の範囲を渡せば、順に連結されます。行と列の両方に広がった範囲でも、一列に伸ばされます。

この関数の価値は、他の関数と組み合わせたときに出ます。一列にまとめてから重複を除けば、分散していた項目の一覧が作れます。一列にまとめてから並べ替えれば、全体の順位が出ます。一列にまとめてから件数を数えれば、全体の件数が分かります。

複数の範囲をそのまま他の関数に渡せないことが多いため、この関数が橋渡しの役割を果たします。


空白セルの扱い

範囲に空白セルが含まれていると、結果にも空白として含まれます。件数を数えるときや、重複を除くときに、この空白が邪魔になります。

対処としては、まとめた結果を抽出の関数で絞り込みます。空白でないという条件で絞れば、値の入っているものだけが残ります。

順序としては、まとめてから絞る形になります。逆に、絞ってからまとめようとすると、範囲ごとに絞る必要があり、数式が長くなります。

もうひとつ、数式が返した空文字にも注意が必要です。見た目は空欄ですが、空白セルとは扱いが違います。条件で除外する場合、両方に対応できる書き方にしてください。

範囲の指定を、データのある部分に限定するという方法もあります。列全体を指定すると、大量の空白が含まれることになります。動作も重くなるので、範囲は絞ってください。


縦持ちへの変換に使う

横に広がったデータを縦持ちに変換する用途にも使えます。

月ごとに列が分かれている表は、集計のたびに横断が必要になります。これを縦持ちに変換できれば、条件付きの集計一つで済むようになります。

単純に値を一列にするだけなら、この関数で足ります。しかし、実際には「どの月の値か」という情報も必要です。値だけを縦に並べても、月が分からなければ集計できません。

このため、月の情報も同じ形で一列に並べる必要があります。月の見出しを、各列の行数分だけ繰り返した範囲を作り、それも一列にまとめます。二つの列を並べれば、縦持ちの表になります。

やや手間はかかりますが、一度作ってしまえば、元の横持ちの表が更新されるたびに自動で変換されます。手作業で縦に並べ替えるより確実です。

そもそも横持ちのデータを受け取らない構成にできるなら、そちらのほうが根本的な解決になります。データの提供元と調整できるなら、縦持ちで受け取れないか相談する価値があります。


使いどころの判断

この関数が必要になるのは、複数の範囲を一つの処理に渡したい場合に限られます。

単一の範囲であれば、そのまま他の関数に渡せます。わざわざ一列にまとめる必要はありません。

複数の範囲を扱う場面でも、範囲が隣接しているなら、まとめて一つの範囲として指定できます。離れている場合や、行と列に広がっている場合にだけ、この関数の出番になります。

また、結果は縦一列になるため、元の位置関係は失われます。どの行のどの列だったかという情報は残りません。位置関係が必要な処理では使えません。

スプレッドシート特有の関数であるため、他の環境では使えません。共有する予定があるなら、範囲を縦に並べ直したデータを持つほうが安全です。


横持ちの表を縦に組み替える手順

月ごとに列が分かれた表を、集計しやすい縦持ちに変える手順を具体的に整理します。この作業は一度作れば以降は自動化されるので、手間をかける価値があります。

第一段階として、値の部分を一列にまとめます。月ごとの列を範囲として渡せば、縦一列に並びます。ただし、この時点では「どの月の値か」が失われています。

第二段階として、月の情報も同じ形で並べる必要があります。各月の見出しを、データの行数分だけ繰り返した範囲を作ります。行数が十行なら、一月を十個、二月を十個、という形です。この繰り返しは、行番号から計算して作ります。

第三段階として、項目名も同じ形で並べます。こちらは月の数だけ繰り返す形になります。値の並び順に合わせる必要があるので、繰り返しの単位が月とは逆になります。

第四段階として、三つの列を横に並べます。項目、月、値の三列が揃えば、縦持ちの表として完成です。

第五段階として、空白の行を除きます。抽出の関数で、値が入っているものだけを残します。

手順は多いのですが、一度組めば元の表が更新されるたびに自動で変換されます。手作業で並べ替えるより確実で、作業漏れも起きません。


そもそも縦持ちで受け取れないか

変換の仕組みを作る前に、データの受け取り方を変えられないかを検討する価値があります。

システムからの出力であれば、出力形式を選べる場合があります。縦持ちの形式で出力できるなら、変換の工程そのものが不要になります。

人が入力する表であれば、入力用のシートを縦持ちに設計し直せます。入力する側にとっては横持ちのほうが楽に見えますが、慣れれば縦持ちでも問題ありません。むしろ、項目が増えたときに列を追加する必要がなくなります。

他部署から受け取る場合は、形式の変更を依頼できるか相談してみてください。相手にとっても、縦持ちのほうが管理しやすいことが多いものです。

どうしても横持ちで受け取らざるを得ない場合にだけ、変換の仕組みを作る。この順序で検討すれば、無駄な作業を減らせます。

変換の仕組みは、作った本人以外には理解しにくいという弱点もあります。引き継ぎを考えると、そもそも変換が不要な構成のほうが望ましいのです。


変換の前に確認すること

複数の範囲を一列にまとめる処理を組む前に、確認しておくべきことがあります。

範囲の大きさを把握してください。まとめた結果の行数は、各範囲の行数と列数を掛けた合計になります。想定より大きくなることが多いので、展開先を十分に空けてください。

空白セルの割合を確認してください。範囲に空白が多いと、結果にも空白が多く含まれます。抽出の関数で除く工程が必要になります。

値の型が揃っているか確認してください。数値と文字列が混在していると、まとめた後の集計で問題が起きます。

順序が意味を持つかを確認してください。まとめると、元の位置関係は失われます。どの範囲のどの位置だったかが必要なら、その情報も並行して並べる必要があります。

そして、そもそもこの処理が必要かを確認してください。データの持ち方を変えられるなら、変換は不要になります。受け取る形式を変えられないか、提供元と相談する価値があります。

これらを確認してから組み始めれば、途中で行き詰まることが減ります。変換の処理は組み上がるまで結果が見えないので、事前の見通しが重要になります。

「配列・抽出」の関数を全体から見る

配列・抽出は複数の値をまとめて返す関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに9本あります。

記事
ARRAYFORMULA
ARRAY_CONSTRAIN
FILTER
QUERY
SEQUENCE
SORT
SORTN
TRANSPOSE
UNIQUE

このカテゴリで共通するつまずき

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

元の表を変えずに別の見え方を作れるのが利点です。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

書き始める前に決めておくことがあります。ここが曖昧なまま書くと、途中で行き詰まります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

元の表を変えずに別の見え方を作れるのが利点です。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

関数を問わず、結果がずれる原因は限られています。この5つを確認すれば、大半が解決します。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

現在、201本の記事をカテゴリ別に整理しています。関数名が分からない場合は、カテゴリから探してください。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本
条件15本
機能12本
配列・抽出10本 ←この記事
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. エラーになって展開されません

展開される先に何か入っています。下方向を空にしてください。

Q. 空白も含まれます

抽出の関数で、空白でないものだけを絞り込んでください。

Q. 複数の範囲を渡せますか

渡せます。カンマで区切って並べてください。順に連結されます。

Q. 横一列にできますか

この関数は縦一列にします。横にしたい場合は、行と列を入れ替える関数で包んでください。

Q. 元の位置が分からなくなります

位置の情報は失われます。必要なら、位置を表す列も同じ形で作って並べてください。

Q. 重複を除けますか

まとめた結果を、重複を除く関数に渡してください。

Q. Excelでも使えますか

スプレッドシート特有の関数です。他の環境では、範囲を縦に並べ直す必要があります。

Q. 動作が重いのですが

範囲を列全体で指定していないか確認してください。データのある範囲に絞ると改善します。



まとめ

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

関連する関数