Excelで表を作っていて、「あ、これ縦と横が逆だった…」と気づいた経験はありませんか。コピペで行列を入れ替えることもできますが、元データが変わるたびに貼り直すのは面倒ですよね。
そんなときに使えるのがTRANSPOSE関数です。数式ひとつで行と列を入れ替えられて、元データとの連動もバッチリ。この記事では、基本の使い方から応用テクニック、よくあるエラーの対処法まで、わかりやすく解説します。
TRANSPOSE関数とは?行と列をワンステップで入れ替える関数
TRANSPOSE(トランスポーズ)関数は、指定した範囲の行と列を入れ替えた配列を返す関数です。「transpose」は英語で「転置する・入れ替える」という意味。元の表の1行目が新しい表の1列目に、2行目が2列目に…という形で変換されます。
たとえば、3行×5列の表をTRANSPOSE関数にかけると、5行×3列の表に変わります。数式で処理するので、元データを変更すれば結果も自動で更新されるのがポイントです。
基本構文と引数
=TRANSPOSE(配列)
引数はたった1つだけです。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 行と列を入れ替えたいセル範囲または配列 |
シンプルな構文なので、覚えやすいですよね。引数に指定するのは、セル範囲(例:A1:E3)でも、他の関数が返す配列でもOKです。
コピペの「行列を入れ替える」との違い・使い分け
Excelには、コピー → 形式を選択して貼り付け →「行列を入れ替える」という機能もあります。どちらを使うべきか、違いを整理しておきましょう。
| 比較項目 | TRANSPOSE関数 | コピペの行列入れ替え |
|---|---|---|
| 元データとの連動 | あり(自動更新) | なし(静的コピー) |
| 書式のコピー | なし(値のみ) | あり(書式・罫線も) |
| 入力方法 | 数式を入力 | マウス操作で完結 |
| ファイルサイズへの影響 | 数式分だけ増える | 影響なし |
| 向いている場面 | 元データが頻繁に変わる | 一度きりの変換でOK |
使い分けの目安はシンプルです。元データと連動させたいならTRANSPOSE関数、書式ごと一度だけコピーしたいならコピペ。目的に合わせて選んでみてください。
ちなみに、コピペで行列を入れ替えたいときは、コピーしたいセル範囲を選択してCtrl+C → 貼り付け先のセルで右クリック →「形式を選択して貼り付け」→「行/列の入れ替え」にチェック → OK、の流れで操作します。
TRANSPOSE関数の基本的な使い方
ここからは、実際の入力手順を見ていきましょう。お使いのExcelバージョンによって操作が異なるので、それぞれ解説します。
Excel 365/2021(スピル)での入力手順
Microsoft 365やExcel 2021では、スピル機能が使えます。スピルとは、数式の結果が複数セルに自動展開される機能のことです。
手順はとてもかんたんです。
- 結果を表示したいセルを1つだけ選択する
=TRANSPOSE(A1:E3)のように数式を入力する- Enterキーで確定する
これだけで、転置された表が自動的に展開されます。出力先のセルを事前に選択する必要はありません。スピル展開された範囲は青枠で囲まれて表示され、どこまでが結果なのかが一目でわかります。
旧バージョン(Excel 2019以前)でのCtrl+Shift+Enter入力
Excel 2019以前ではスピルが使えません。代わりにCSE(配列数式)として入力します。
- 転置後のサイズに合わせて出力先のセル範囲を選択する(元が3行×5列なら、5行×3列を選択)
=TRANSPOSE(A1:E3)と数式を入力する- Ctrl + Shift + Enter で確定する
正しく入力できると、数式バーに {=TRANSPOSE(A1:E3)} と中括弧が表示されます。この中括弧は自動で付くもので、手入力はしないでくださいね。
CSE入力した数式は、配列の一部だけを編集することができません。修正したいときは配列範囲全体を選択し直してから、もう一度Ctrl+Shift+Enterで確定する必要があります。
入力例:縦の売上表を横に変換する
実際のデータで試してみましょう。次のような縦方向の売上表があるとします。
| A | B | |
|---|---|---|
| 1 | 月 | 売上 |
| 2 | 4月 | 120 |
| 3 | 5月 | 150 |
| 4 | 6月 | 180 |
この表を横方向に変換するには、空いているセル(たとえばD1)に次の数式を入力します。
=TRANSPOSE(A1:B4)
結果はこうなります。
| D | E | F | G | |
|---|---|---|---|---|
| 1 | 月 | 4月 | 5月 | 6月 |
| 2 | 売上 | 120 | 150 | 180 |
4行×2列の表が、2行×4列に変換されました。元のB2セルの値を「200」に変えると、転置先も自動で「200」に更新されますよ。
実務で使えるTRANSPOSE関数の活用例
基本がわかったところで、実務でよくあるシチュエーションを3つ紹介します。どれも「あるある」な場面なので、自分の業務に置き換えながら読んでみてください。
例1:縦長の名簿を横並びの一覧表に変換する
A列に並んでいる従業員名を、横一行のヘッダーとして使いたいケースです。よくあるのは、月次の勤怠管理表で「従業員名を列の見出しにしたい」というシーンですね。
A2:A11に10名の従業員名が縦に並んでいるとして、これをC1から横並びに展開します。
=TRANSPOSE(A2:A11)
C1に上記の数式を入力すると、C1からL1までに従業員名が横並びで展開されます。元のA列の名簿に新しい名前を追加した場合でも、参照範囲を広げれば自動で反映されますよ。
例2:縦型データを横型集計表のヘッダーに転用する
商品マスタの商品名(縦並び)を、月別売上集計表の列見出し(横並び)として使い回したいケース。マスタを二度書きせずに済むので、メンテナンス性がぐっと上がります。
商品マスタがA列(A2:A6)に5商品分あるとして、集計表のC1から横並びで使うには次のように書きます。
=TRANSPOSE(A2:A6)
商品マスタに新しい商品を追加したら、集計表の列見出しも自動で更新されます。手作業でコピペし直す必要がないのはラクですよね。
例3:アンケート回答の縦持ちデータを横持ちに変換する
データベースから出力したアンケート結果が「回答者ID・設問・回答」の縦持ち形式になっていて、これを「回答者ID別に設問を横並び」の形に直したいケース。レポートやダッシュボードに使う前処理として頻出します。
ある回答者のID単位で設問1〜設問5の回答がB2:B6に縦に並んでいるとしたら、こう書きます。
=TRANSPOSE(B2:B6)
これでD2:H2に回答が横展開されます。複数の回答者ぶんを並べたい場合は、後述するBYROW関数やMAP関数と組み合わせる方法もありますが、まずはシンプルにTRANSPOSEで1人ずつ展開するところから始めてみてください。
よくあるエラーと対処法
TRANSPOSE関数でつまずきやすいエラーと、その解決策をまとめました。
#SPILL!エラーの原因と解決策(スピル対応バージョン)
Microsoft 365 / Excel 2021でTRANSPOSE関数を入力したときに#SPILL!エラーが出るのは、展開先のセルに何かが入っていることが原因です。
具体的には、次のようなケースで発生します。
- 展開先のセルにすでに値や数式が入力されている
- 展開先のセルが結合されている
- 展開先のセルに条件付き書式の制約がある(まれ)
- ワークシートの端に近すぎて、展開しきれない
対処法は、展開予定のセル範囲をすべて空にすること。#SPILL!エラーが表示されているセルにマウスホバーすると、邪魔しているセルが点線で示されるので、そのセルをクリアすれば解決します。
結合セルが原因の場合は、結合を解除してから再度数式を確認してください。
#VALUE!エラーが出るときの原因と解決策
#VALUE!エラーは、主にCSE入力時に発生します。原因と対処法は次のとおりです。
- 配列ではなく単一の値を指定している → セル範囲を正しく指定し直す
- Ctrl+Shift+Enterで確定していない → 数式バーにカーソルを置き、Ctrl+Shift+Enterで再確定する
Microsoft 365やExcel 2021をお使いなら、通常のEnter確定で問題ありません。
参照範囲がずれる・#N/Aが表示されるときのチェックポイント
思った結果にならないときは、以下をチェックしてみてください。
- 転置後のサイズが合っていない(CSEの場合):元が4行×2列なら、出力先は2行×4列を選択する
- 出力範囲が大きすぎる(CSEの場合):余ったセルに
#N/Aが表示される。出力範囲を転置後のサイズぴったりに合わせる #REF!エラーが表示される:参照元の範囲がシート外になっていないか確認する- 空白セルが0と表示される:TRANSPOSEは空白セルを0として返す仕様。空白のまま転置したい場合は
=TRANSPOSE(IF(A1:E3="","",A1:E3))のようにIF関数で囲む
FILTER・SORT・SEQUENCEと組み合わせた応用テクニック
TRANSPOSE関数は単体でも便利ですが、他の関数と組み合わせると活用の幅がぐっと広がります。ここからはMicrosoft 365 / Excel 2021向けの応用例を紹介します。
FILTER+TRANSPOSEで条件抽出した結果を横並びに表示
FILTER関数で抽出した結果は、通常は縦方向に並びます。これをTRANSPOSEで横方向に展開できます。
たとえば、A2:A10に商品名、B2:B10にカテゴリが入っているとします。カテゴリが「食品」の商品名だけを横並びにするには、こう書きます。
=TRANSPOSE(FILTER(A2:A10, B2:B10="食品"))
FILTER関数が縦に抽出した結果を、TRANSPOSEが横方向に変換する流れです。ダッシュボードなどで横並びに表示したいときに重宝します。
SORT+TRANSPOSEで並べ替えた結果を縦横変換
SORT関数で並べ替えた結果を、そのまま横展開することもできます。
=TRANSPOSE(SORT(A2:A10))
SORT関数が昇順に並べ替えた結果を、TRANSPOSEで横一行に展開します。ランキング表を横型レイアウトで見せたいときに便利ですよ。
SEQUENCE+TRANSPOSEで連番を行方向に展開
SEQUENCE関数は通常、縦方向に連番を生成します。これを横方向にしたいときにTRANSPOSEが使えます。
=TRANSPOSE(SEQUENCE(5))
SEQUENCE(5)が生成する縦方向の1〜5を、TRANSPOSEで横方向に変換します。結果は1行×5列で「1, 2, 3, 4, 5」と横に並びます。
ちなみに、SEQUENCE関数は=SEQUENCE(1,5)のように行数と列数を指定すれば、TRANSPOSE無しでも横展開が可能です。状況に応じて使い分けてみてください。
VSTACK・HSTACKとの組み合わせ
VSTACK関数やHSTACK関数と組み合わせれば、複数の表を結合してから転置する処理も一発でできます。
HSTACKで横に結合した表をTRANSPOSEで縦に変換
たとえば、部署ごとの売上がA列とC列に分かれているとします。これを横に結合してから縦に転置するには、次のように書きます。
=TRANSPOSE(HSTACK(A1:A4, C1:C4))
HSTACK関数がA1:A4とC1:C4を横方向に結合して、TRANSPOSEがその結果を縦横入れ替えます。バラバラに配置されたデータを、見やすいレイアウトに整えるときに活躍する組み合わせです。
逆のパターンも可能です。VSTACK関数で縦に結合した結果をTRANSPOSEで横展開すれば、複数リストを横一行にまとめられます。
=TRANSPOSE(VSTACK(A1:A3, A5:A7))
TRANSPOSE関数を使うときに知っておきたい注意点
最後に、TRANSPOSEを使ううえでつまずきがちなポイントをいくつか押さえておきましょう。
大きな表でのパフォーマンス
数千行×数十列のような大きな表をTRANSPOSEすると、再計算に時間がかかることがあります。元データが頻繁に変わらないなら、コピペの「行列を入れ替える」のほうが軽快です。連動が必要な部分だけTRANSPOSEを使い、固定値はコピペで済ませる、という使い分けが現実的です。
書式・数式は転置されない
TRANSPOSE関数で転置されるのは値だけ。背景色・罫線・フォント・条件付き書式などは引き継がれません。見た目を整えたい場合は、転置後の範囲に対して別途書式を設定するか、コピペの行列入れ替えを使ってください。
別シートや別ブックの参照も可能
=TRANSPOSE(Sheet2!A1:E3)のように別シートのセル範囲を指定したり、別ブックを開いている状態であれば=TRANSPOSE([Book2.xlsx]Sheet1!A1:E3)のように別ブックを参照することもできます。複数ファイルにまたがるデータをまとめるときに便利です。
ただし、参照元のブックを閉じると最後の計算結果がそのまま残ります。元データの更新を反映させたいなら、参照元のブックを開いた状態で再計算する必要があります。
まとめ:TRANSPOSE関数を使いこなすポイント
この記事では、TRANSPOSE関数の基本から応用まで解説しました。最後にポイントを整理しておきましょう。
- 構文はシンプル:
=TRANSPOSE(配列)の引数1つだけ - バージョンで入力方法が異なる:365/2021はEnter確定、2019以前はCtrl+Shift+Enter
- コピペとの使い分け:元データと連動させたいならTRANSPOSE、書式ごと一度だけコピーしたいならコピペ
- #SPILL!エラーは展開先を空に:展開予定のセルに値や結合があると発生する
- 他の関数との組み合わせが強力:FILTER関数・SORT関数・SEQUENCE関数・VSTACK関数との併用で活用の幅が広がる
行と列の入れ替えは、表の見せ方を変えるだけでデータの印象がガラリと変わります。ぜひTRANSPOSE関数を使いこなして、見やすいレイアウトを効率よく作ってみてください。
