スプレッドシートで表の縦と横を入れ替えたいとき、「貼り付けオプションで転置」を使っている方は多いですよね。でもこの方法だと、元データを修正しても入れ替え先には反映されません。
TRANSPOSE関数を使えば、行と列を数式で入れ替えられます。元データが変わると自動で更新されるのが最大のメリットです。
この記事では、TRANSPOSE関数の基本から、QUERY関数との組み合わせや「貼り付け→転置」との違いまでわかりやすく解説します。
スプレッドシートのTRANSPOSE関数とは?
TRANSPOSE関数(読み方: トランスポーズ関数)は、セル範囲の行と列を入れ替える関数です。英語の「transpose」は「転置する・入れ替える」という意味があります。
たとえば、縦3行 x 横4列の表を、横4行 x 縦3列に変換できます。元のデータと数式でつながっているため、元データを変更すると入れ替え先も自動で更新されますよ。
TRANSPOSE関数にできることをまとめると、次のとおりです。
- セル範囲の行と列を入れ替える(転置する)
- 元データとリアルタイムに連動する
- 他の関数(QUERY、SORT、FILTERなど)の結果も転置できる
- 横持ちデータと縦持ちデータの相互変換に使える
TRANSPOSE関数の基本構文
=TRANSPOSE(配列またはセル範囲)
カッコの中に、行列を入れ替えたい範囲を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列またはセル範囲 | 必須 | 行と列を入れ替えたいセル範囲。元の行が新しい列に、元の列が新しい行になる |
引数は1つだけなので覚えやすい関数です。結果は自動でスピル展開されるため、出力先の範囲を事前に選択する必要はありません。
NOTE
Googleスプレッドシートでは、TRANSPOSE関数の結果は常に自動展開(スピル)されます。Excelの旧バージョンのようにCtrl+Shift+Enterで配列数式として入力する必要はありません。
TRANSPOSE関数の基本的な使い方
ここでは、社員名簿のような縦長の表をTRANSPOSE関数で横方向に変換する例を紹介します。
サンプルデータ
A1:D4に以下のデータが入っているとします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 名前 | 部署 | 入社年 | 等級 |
| 2 | 田中 | 営業 | 2018 | A |
| 3 | 佐藤 | 総務 | 2020 | B |
| 4 | 鈴木 | 経理 | 2019 | A |
数式を入力する
出力先の左上セル(たとえばA7)に以下の数式を入力して、Enterを押します。
=TRANSPOSE(A1:D4)
元の4行が4列に、元の4列が4行に変換されます。
| A | B | C | D | |
|---|---|---|---|---|
| 7 | 名前 | 田中 | 佐藤 | 鈴木 |
| 8 | 部署 | 営業 | 総務 | 経理 |
| 9 | 入社年 | 2018 | 2020 | 2019 |
| 10 | 等級 | A | B | A |
元データ(A1:D4)を変更すると、転置先(A7:D10)も自動で更新されますよ。
単一行・単一列の転置
1行のデータを1列に変換することもできます。
=TRANSPOSE(A1:D1)
横1行x4列の「名前, 部署, 入社年, 等級」が、縦4行x1列に変換されます。逆に、縦1列のデータを横1行に展開したいときも同じように使えます。
「貼り付け→行列を入れ替え」との違い
スプレッドシートには、コピー後に「特殊貼り付け→転置して貼り付け」を選ぶ方法もあります。TRANSPOSE関数とどちらを使うべきか、比較表で整理しました。
| 比較項目 | TRANSPOSE関数 | 貼り付けの転置 |
|---|---|---|
| 元データとの連動 | あり(自動更新) | なし(静的コピー) |
| 操作方法 | 数式を入力 | コピー → 右クリック → 特殊貼り付け → 転置して貼り付け |
| 元データの追加 | 参照範囲を広げれば自動対応 | 再度コピー&貼り付けが必要 |
| 書式の引き継ぎ | なし(値のみ) | あり(書式も含めてコピー) |
| 結果の編集 | 不可(数式の結果のため) | 可能(独立したデータ) |
使い分けの目安はこうです。
- 元データが更新される場合 → TRANSPOSE関数(連動して自動更新される)
- 一度きりの変換で書式も残したい場合 → 貼り付けの転置
月次データや日報のように継続的に更新される表では、TRANSPOSE関数のほうが便利です。一方、レイアウトを整えた最終版の表をコピーしたいだけなら、貼り付けの転置で十分ですよ。
TIP
貼り付けの転置はショートカットでも操作できます。範囲をコピーした後、Ctrl+Shift+V(特殊貼り付け)で「転置して貼り付け」にチェックを入れてください。
TRANSPOSE関数の実務活用パターン
パターン1: 横持ちデータを縦持ちに変換する
月別の売上が横方向に並んでいる表を、縦方向に変換する場面はよくあります。
=TRANSPOSE(B1:M1)
横1行x12列の月名データを、縦12行x1列に変換できます。グラフの元データやピボットテーブルとして使いやすい形になりますよ。
パターン2: QUERY関数と組み合わせてデータを抽出・転置する
QUERY関数で抽出した結果を、そのままTRANSPOSEで転置できます。
たとえば、売上データから営業部のデータだけを抽出して横方向に展開する数式です。
=TRANSPOSE(QUERY(A1:D10, "SELECT B WHERE A='営業'"))
QUERY関数が縦方向に抽出した結果を、TRANSPOSEで横方向に並べ替えます。ダッシュボードで複数部署のデータを横並びに表示したいときに便利なパターンです。
もう少し複雑な例として、QUERY関数のPIVOT句と組み合わせることもできます。
=TRANSPOSE(QUERY(A1:C10, "SELECT A, SUM(C) GROUP BY A"))
グループ集計の結果を転置して、横方向に並べたレポート形式にできます。
パターン3: SORT関数・FILTER関数と組み合わせる
SORT関数やFILTER関数の結果を転置することもできます。
=TRANSPOSE(SORT(A2:A10))
縦方向に並べ替えたデータを、横方向に展開します。ランキングを横一列に表示したいときに使えるテクニックです。
=TRANSPOSE(FILTER(B2:B10, A2:A10="東京"))
FILTER関数で絞り込んだ結果を横方向に展開します。特定条件のデータを横並びで見たい場面で活躍しますよ。
パターン4: ARRAYFORMULA関数と組み合わせて一括変換する
ARRAYFORMULA関数と組み合わせると、転置した結果に対して一括で計算を適用できます。
=ARRAYFORMULA(TRANSPOSE(B2:B10) * 1.1)
縦方向の売上データを横方向に転置しつつ、すべての値に1.1(税込み換算)を掛けています。転置と計算を1つの数式でまとめられるのがポイントです。
パターン5: 複数列のデータを転置してカード形式にする
個人の情報が横一列に並んでいるデータを、縦型のプロフィールカード形式に変換する使い方です。
=TRANSPOSE(A2:F2)
A2:F2に「田中, 営業部, 東京, 2018年入社, A等級, 内線1234」と横並びのデータがあれば、縦6行の一覧に変換できます。
ヘッダー行も一緒に転置すると、さらに見やすくなります。
=TRANSPOSE({A1:F1; A2:F2})
「{}」で配列を作り、ヘッダー行とデータ行を結合してから転置しています。ラベルとデータが横並びになるので、カード形式のレイアウトに最適ですよ。
よくあるエラーと対処法
TRANSPOSE関数自体はシンプルですが、使い方によってはエラーが発生します。
| エラー | 原因 | 対処法 |
|---|---|---|
#REF! | 転置先のセルに既にデータがある | 転置先の範囲を空にしてください |
#REF! | 参照先の行や列が削除された | 参照先セルが存在するか確認してください |
#ERROR! | 配列の展開先がシートの端を超える | 出力先をシートの左上寄りに移動してください |
#N/A | 他の関数と組み合わせた際に空セルが含まれる | IFERROR関数で空文字に置換してください |
| 結果が1セルだけ | 単一セルを指定している | 範囲(例: A1:D4)を指定してください |
特に注意したいのが「転置先のセルに既にデータがある」ケースです。スプレッドシートのスピル展開は、出力先にデータがあると #REF! エラーになります。
TIP
転置後のサイズがわからないときは、空白の多いエリアにTRANSPOSE関数を入力してみてください。元データが3行x5列なら、転置後は5行x3列になります。行数と列数が入れ替わるルールを覚えておけば迷いません。
TRANSPOSE関数の結果は編集できない
TRANSPOSE関数の結果はスピル展開された配列です。結果の一部のセルだけを編集・削除することはできません。変更したい場合は、元データを修正するか、貼り付けの転置に切り替えてください。
ExcelのTRANSPOSE関数との違い
ExcelにもTRANSPOSE関数がありますが、スプレッドシート版との違いがいくつかあります。
| 項目 | スプレッドシート | Excel(Microsoft 365) | Excel(2019以前) |
|---|---|---|---|
| 入力方法 | Enterのみ(自動スピル) | Enterのみ(自動スピル) | Ctrl+Shift+Enter(配列数式) |
| 出力先の事前選択 | 不要 | 不要 | 必要(サイズを正確に合わせる) |
| 結果の自動展開 | あり | あり(スピル) | なし |
| 出力先にデータがある場合 | #REF! エラー | #SPILL! エラー | 上書きされる |
スプレッドシートとMicrosoft 365のExcelでは、ほぼ同じ感覚で使えます。Excel 2019以前を使っている方が移行する場合は、Ctrl+Shift+Enterが不要になる分、スプレッドシートのほうがシンプルですよ。
ExcelのTRANSPOSE関数の詳しい使い方は「ExcelのTRANSPOSE関数の使い方」で解説しています。
まとめ
TRANSPOSE関数は、セル範囲の行と列を入れ替えるシンプルな関数です。元データとリアルタイムに連動するため、更新頻度の高い表の変換に最適です。
この記事のポイントをおさらいしておきましょう。
- TRANSPOSE関数は
=TRANSPOSE(範囲)で、行と列を入れ替える(Enterだけで自動展開) - 「貼り付け→転置」は静的コピー、TRANSPOSE関数は元データと連動する
- QUERY関数と組み合わせれば、抽出結果の転置も1つの数式で完結する
- SORT・FILTER・ARRAYFORMULAとの組み合わせで活用の幅が広がる
- 転置先のセルを空にしておかないと
#REF!エラーが出るので注意
まずは =TRANSPOSE(A1:D4) のシンプルな使い方から試してみてください。QUERY関数との組み合わせを覚えれば、データの見せ方がグッと柔軟になりますよ。
