TRANSPOSE関数の使い方|行と列を入れ替える

執筆者:

カテゴリ:

TRANSPOSEは、行と列を入れ替える関数です。

縦に並んだデータを横に、横に並んだデータを縦にします。元のデータには手を触れず、入れ替えた結果を別の場所に表示します。

書式

=TRANSPOSE(範囲)

引数は範囲だけです。

基本の動き

A B C
1 東京 大阪 名古屋
2 1200 800 1500
=TRANSPOSE(A1:C2)

結果:

東京 1200
大阪 800
名古屋 1500

2行3列が、3行2列になりました。

貼り付け機能との違い

同じことは「編集 → 特殊貼り付け → 転置して貼り付け」でもできます。

特殊貼り付け TRANSPOSE
元データとの連動 しない(固定値) する(自動更新)
数式の残り方 値だけ残る 数式として残る
使う場面 一度きりの変換 継続的に見たい

元データが更新される表なら TRANSPOSE、一度きりの整形なら特殊貼り付けという使い分けになります。

他の関数と組み合わせる

TRANSPOSEは範囲を返すので、他の関数の中でも使えます。

SPLITの結果を縦にする

SPLIT は結果を横方向に返します。縦にしたいときに使います。

=TRANSPOSE(SPLIT(A1, ","))

縦のリストを横に並べる

見出し行を作るときなどに使います。

=TRANSPOSE(マスタ!A2:A20)

FILTERの結果を入れ替える

=TRANSPOSE(FILTER(A2:C100, A2:A100="東京"))

縦横の検索を作る

MATCH と組み合わせて、横方向の検索に使うこともできます。ただし HLOOKUPXLOOKUP のほうが素直です。

横持ちを縦持ちにしたいとき

TRANSPOSEでは目的を達成できないことがあります。

月ごとに列が伸びる「横持ち」の表を、集計しやすい「縦持ち」に直したい場合を考えてください。

元の表

支店 4月 5月 6月
東京 1200 1400 1300
大阪 800 950 900

欲しい形

支店 金額
東京 4月 1200
東京 5月 1400

TRANSPOSEは単に行列を入れ替えるだけなので、この形にはなりません。 FLATTEN を使った変換が必要です。詳しくは FLATTEN のページで扱っています。

「行列の入れ替え」と「持ち方の変換」は別物です。ここは混同しやすいところです。

エラーの対処

#REF! が出る

結果の展開先にデータが入っています。 TRANSPOSEは元の範囲の縦横を入れ替えた大きさで展開されます。

3行10列の範囲なら、結果は10行3列です。展開先にそれだけの空きが必要になります。

空欄が0になる

TRANSPOSEは空欄を 0 として返します。空欄のまま表示したいなら IF を挟みます。

=ARRAYFORMULA(IF(TRANSPOSE(A1:C2)="", "", TRANSPOSE(A1:C2)))

TRANSPOSEを2回書く必要があり冗長ですが、これが標準的な回避方法です。

書式が引き継がれない

値だけが返ります。 色や罫線は反映されません。書式も含めて入れ替えたいなら、特殊貼り付けを使ってください。

Excelとの違い

TRANSPOSEは共通です。書式も挙動も同じです。

ただし違いがあります。

Excel スプレッドシート
入力方法(旧版) 配列数式(Ctrl+Shift+Enter) 通常の入力
入力方法(365) 通常の入力 通常の入力
特殊貼り付けでの転置 ある ある

Excel 2019以前では、TRANSPOSEは配列数式として Ctrl + Shift + Enter で確定する必要がありました。スプレッドシートでは通常の入力で動きます。

まとめ

  • – 書式は =TRANSPOSE(範囲)行と列を入れ替える
  • 元データと連動するのが特殊貼り付けとの違い
  • – 結果は元の縦横が入れ替わった大きさで展開される
  • #REF!展開先にデータがあるという意味
  • – 空欄は 0 になる。避けるなら IF を挟む
  • 「横持ち→縦持ち」の変換はTRANSPOSEではできないFLATTEN を使う

関連する関数

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です