Excelで複数行・複数列にまたがるデータを、横1行にまとめたいことってありますよね。手動でコピー&ペーストしていると時間がかかりますし、元データが変わるたびにやり直しです。
TOROW関数を使えば、2次元の範囲を数式ひとつで横1行に変換できます。空白やエラーの除外もオプションひとつで設定できるので、データ整理が一気にスムーズになりますよ。
この記事では、TOROW関数の引数の意味から使い方を解説します。TOCOL関数・TRANSPOSE関数との違い、よくあるエラーの対処法もあわせて紹介しますよ。
ExcelのTOROW関数とは?
読み方と基本概念
TOROW関数(読み方: トゥロウ関数)は、2次元のセル範囲や配列を横1行の配列に変換する関数です。「to row(行にする)」が名前の由来になっています。
たとえば、3行x4列の表を横1行x12列に変換できます。元データと数式でつながっているため、元データを変更すると変換結果も自動で更新されますよ。
TOROW関数にできることをまとめると、次のとおりです。
- 2次元のセル範囲を横1行に変換する
- 空白セルやエラー値を除外して変換できる
- 読み取り順序を行方向・列方向で切り替えられる
- 他の関数と組み合わせてデータ整理を効率化できる
使えるバージョン
TOROW関数は比較的新しい関数です。使えるバージョンは限られているので、事前に確認しておきましょう。
| バージョン | 対応状況 |
|---|---|
| Microsoft 365 | 対応 |
| Excel 2024 | 対応 |
| Excel for the web | 対応 |
| Excel 2021 | 非対応 |
| Excel 2019以前 | 非対応 |
Excel 2021以前のバージョンでは #NAME? エラーになります。職場のExcelバージョンが対応しているか、先に確認してくださいね。
TOROW関数の引数を丁寧に解説
まずはTOROW関数の構文を確認しましょう。
=TOROW(配列, [無視], [scan_by_column])
引数は3つありますが、必須なのは第1引数の「配列」だけです。第2・第3引数は省略できます。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 1行に変換したいセル範囲または配列 |
| 無視 | 任意 | 除外する値の種類を指定する(0〜3) |
| scan_by_column | 任意 | 読み取り方向を指定する(FALSE/TRUE) |
第1引数「配列」
「配列」には、横1行に変換したいセル範囲を指定します。B2:D5 のようなセル範囲のほか、他の関数の結果(配列)を渡すこともできます。
=TOROW(B2:D5)
指定した範囲のすべてのセルが、横1行に展開されます。
第2引数「無視」(0/1/2/3)
第2引数では、変換時に除外する値の種類を数値で指定します。省略すると0(すべて保持)になります。
| 値 | 動作 |
|---|---|
| 0(省略時) | すべての値を保持する |
| 1 | 空白セルを除外する |
| 2 | エラー値を除外する |
| 3 | 空白セルとエラー値の両方を除外する |
データに歯抜けやエラーが混ざっている場合は、1や3を指定するとクリーンな結果を取得できます。特に3を指定すると空白とエラーをまとめて除外できるので便利ですよ。
第3引数「scan_by_column」(行順vs列順)
第3引数では、2次元データをどの順番で読み取るかを指定します。省略するとFALSE(行方向)になります。
| 値 | 読み取り順序 | 説明 |
|---|---|---|
| FALSE(省略時) | 行方向 | 1行目を左から右へ → 2行目を左から右へ → … |
| TRUE | 列方向 | 1列目を上から下へ → 2列目を上から下へ → … |
たとえば以下の2行x2列のデータを変換する場合です。
| A列 | B列 | |
|---|---|---|
| 1行目 | A | B |
| 2行目 | 1 | 2 |
- FALSE(行方向): A → B → 1 → 2
- TRUE(列方向): A → 1 → B → 2
並び順が結果に影響するので、用途に合わせて切り替えてください。
TOROW関数の使用例(基本から応用まで)
基本:セル範囲を横1行に変換
月別・拠点別の売上データを横1行に変換してみましょう。
B2:D4に以下のデータが入っているとします。
| B | C | D | |
|---|---|---|---|
| 1 | 4月 | 5月 | 6月 |
| 2 | 100 | 120 | 110 |
| 3 | 80 | 90 | 85 |
| 4 | 60 | 70 | 65 |
数値部分(B2:D4)を横1行に変換します。出力先のセルに以下の数式を入力してください。
=TOROW(B2:D4)
行方向に読み取られ、結果は次のように横1行に並びます。
| 100 | 120 | 110 | 80 | 90 | 85 | 60 | 70 | 65 |
1行目の100→120→110、2行目の80→90→85、3行目の60→70→65という順番で展開されていますね。
空白セルを除外して変換(ignore=1)
データに空白セルが含まれている場合は、第2引数に1を指定しましょう。
たとえば、C3が空白だったとします。
| B | C | D | |
|---|---|---|---|
| 2 | 100 | 120 | 110 |
| 3 | 80 | 85 | |
| 4 | 60 | 70 | 65 |
=TOROW(B2:D4, 1)
空白セルがスキップされ、値のあるセルだけが横1行に並びます。結果は8個の値になります。
| 100 | 120 | 110 | 80 | 85 | 60 | 70 | 65 |
歯抜けのデータを詰めて並べたいときに重宝しますよ。
列方向スキャンで並び順を変える(scan_by_column=TRUE)
第3引数にTRUEを指定すると、列方向に読み取ります。
=TOROW(B2:D4, 0, TRUE)
| 100 | 80 | 60 | 120 | 90 | 70 | 110 | 85 | 65 |
今度は列方向に読み取られています。B列の100→80→60、C列の120→90→70、D列の110→85→65という順番です。
「拠点ごとにまとめたい」なら行方向(FALSE)、「月ごとにまとめたい」なら列方向(TRUE)と使い分けてください。
TOCOL・TRANSPOSEとの違い
TOROW vs TOCOL
TOCOL関数は、TOROW関数のペアとなる関数です。違いは出力の方向だけで、引数の構造はまったく同じです。
- TOROW関数: 横1行に変換する(右方向にスピル)
- TOCOL関数: 縦1列に変換する(下方向にスピル)
引数を変えずに関数名を入れ替えるだけで、出力方向を切り替えられます。
TOROW vs TRANSPOSE
TRANSPOSE関数は、行と列を入れ替える(転置する)関数です。TOROW関数との大きな違いは、データの「形」が変わるかどうかです。
- TOROW関数: 2次元データを1次元(横1行)にフラット化する
- TRANSPOSE関数: 2次元の形を維持したまま行と列を入れ替える
たとえば3行x2列のデータに対して、TOROW関数は1行x6列に変換します。TRANSPOSE関数は2行x3列に変換します。目的がまったく異なる関数ですね。
比較表
| 比較項目 | TOROW関数 | TOCOL関数 | TRANSPOSE関数 |
|---|---|---|---|
| 出力形状 | 横1行(1次元) | 縦1列(1次元) | 行列転置(2次元) |
| 空白・エラー除外 | できる | できる | できない |
| スキャン方向の指定 | できる | できる | できない |
| 構文 | =TOROW(配列, [無視], [scan]) | =TOCOL(配列, [無視], [scan]) | =TRANSPOSE(配列) |
| 主な用途 | データを横1行に展開 | データを縦1列に展開 | 行と列の入れ替え |
データをフラット化したいならTOROW関数またはTOCOL関数、行列の向きを変えたいならTRANSPOSE関数、と覚えておけば迷いません。
他の関数との組み合わせ活用
TOROW関数は単体でも便利ですが、他の関数と組み合わせると活用の幅がさらに広がります。
UNIQUE + TOROW
UNIQUE関数(重複を除外する関数)と組み合わせると、複数列に散らばったデータから重複なしの横1行リストを作れます。
たとえばB2:D5に担当者名が入っている場合です。
=UNIQUE(TOROW(B2:D5, 1))
TOROW関数で全担当者を横1行にまとめてから、UNIQUE関数で重複を除外しています。横方向のユニークリストが必要な場面で活躍します。
FILTER + TOROW
FILTER関数(条件に合うデータを抽出する関数)の結果をTOROW関数で横1行に展開するパターンです。
=TOROW(FILTER(B2:D10, A2:A10="営業"), 1)
FILTER関数で営業部のデータだけを抽出し、TOROW関数で横1行にまとめています。条件抽出の結果をフラットに並べたいときに使えます。
ただし、FILTER関数の結果が空(条件に合うデータがない)の場合は #CALC! エラーになります。データが空になる可能性があるときは、IFERROR関数で囲んでおくと安心です。
=IFERROR(TOROW(FILTER(B2:D10, A2:A10="営業"), 1), "該当なし")
HSTACK + TOROW
HSTACK関数(複数の範囲を横方向に結合する関数)と組み合わせると、離れた複数の範囲をまとめて横1行に変換できます。
=TOROW(HSTACK(B2:C5, E2:F5))
HSTACK関数で2つの範囲を横方向に結合してから、TOROW関数で横1行にフラット化しています。離れた範囲のデータを統合したいときに便利ですよ。
同じことを縦方向で結合するなら、VSTACK関数を使います。
=TOROW(VSTACK(B2:D3, B6:D7))
よくあるエラーと対処法
TOROW関数を使っていて遭遇しやすいエラーをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#SPILL! | スピル先のセルにデータがある | 出力先の横方向のセルを空にしてください |
#NAME? | 非対応バージョンで使用した | Microsoft 365・Excel 2024以降にアップグレードしてください |
#NUM! | 配列が大きすぎる | 変換対象の範囲を小さくしてください |
#CALC! | FILTER関数との組み合わせで空集合になった | IFERROR関数でエラー時の代替値を指定してください |
#SPILL!
TOROW関数はスピル機能を使って結果を横方向に展開します。展開先のセルに値や数式が入っていると #SPILL! エラーが発生します。
対処法はシンプルで、スピル先の横方向のセルを空にするだけです。結果が何セル分展開されるかを事前に確認して、十分な空きスペースを確保しておきましょう。
#NAME?
#NAME? エラーが出る場合、Excel 2021以前のバージョンを使っている可能性が高いです。TOROW関数はMicrosoft 365またはExcel 2024以降でないと使えません。
関数名のスペルミスでも #NAME? になります。「TOROW」のつづりが正しいか、まず確認してくださいね。
バージョンの都合で使えない場合は、TRANSPOSE関数とINDEX関数の組み合わせで代替できます。ただし数式が複雑になるので、バージョンアップがおすすめです。
#NUM!
変換対象の配列が大きすぎると #NUM! エラーになります。Excelの列数の上限(16,384列)を超える数のセルを横1行に展開しようとした場合に発生します。
範囲が大きい場合は、先にCHOOSEROWS関数やCHOOSECOLS関数で絞り込みましょう。必要な行・列だけを取り出してからTOROW関数に渡すことで解決できます。
=TOROW(CHOOSEROWS(A1:Z1000, SEQUENCE(10)))
SEQUENCE関数(連番を生成する関数)で先頭10行だけを指定し、範囲を絞り込んでいます。
まとめ
TOROW関数は、2次元のセル範囲を横1行に変換するための関数です。空白やエラーの除外、スキャン方向の制御まで備わっており、データ整理を効率化できます。
この記事のポイントをおさらいしておきましょう。
- TOROW関数は
=TOROW(範囲)で、2次元データを横1行に変換する - 第2引数で空白(1)やエラー(2)を除外できる。両方除外は3を指定する
- 第3引数でスキャン方向を切り替えられる(FALSE: 行方向、TRUE: 列方向)
- TOCOL関数はペア関数で、縦1列に変換する。引数の構造は同じ
- TRANSPOSE関数とは目的が異なる。フラット化ならTOROW、転置ならTRANSPOSE
まずは =TOROW(A1:C3) のシンプルな形から試してみてください。UNIQUE関数やFILTER関数と組み合わせれば、散らばったデータの整理がグッと楽になりますよ。
