Excelで行と列を入れ替えるには、結果を始めたい場所に=TRANSPOSE(A1:D3)と入力します。A1:D3の1行目が結果の1列目になります。結果はつながったままなので、元のデータの数値を変えるとコピーの数値も変わります。B2を50に変えて、B6がそれに合わせて変わるのを確かめてください。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Rep | Q1 | Q2 | Q3 |
| 2 | Ann | 10 | 12 | 9 |
| 3 | Ben | 8 | 11 | 14 |
| 4 | ||||
| 5 | Rep | Ann | Ben | |
| 6 | Q1 | 10 | 8 | |
| 7 | Q2 | 12 | 11 | |
| 8 | Q3 | 9 | 14 |
元のデータは3行4列なので、結果は4行3列になります。Excel 2021とMicrosoft 365では、TRANSPOSEはスピルします。1つのセルに入力してEnterを押すだけです。
形式を選択して貼り付けで行列を入れ替える
入れ替えた表が一度だけ必要なら、形式を選択して貼り付けのほうが手早く、数式も残りません:
- 範囲を選択してコピーします(Ctrl+C、MacではCmd+C)。
- コピーした範囲の外で、結果を置きたい場所の左上のセルをクリックします。
- ホームタブで「貼り付け」の下の矢印をクリックして「行/列の入れ替え」を選ぶか、Ctrl+Alt+V(MacではCmd+Ctrl+V)を押して「行列を入れ替える」にチェックを入れ、OKをクリックします。
Windowsでは、コピーした後にAlt、H、V、Tの順にキーを押しても同じです。貼り付けたコピーは書式を保ちますが、つながってはいません。元のデータが変わったら、もう一度貼り付けます。Excelはコピーした範囲の中の数式を新しい位置に合わせて調整します。相対参照を使っている数式は確認するか、数値だけが必要なら値として貼り付けてください。
TRANSPOSE関数の構文
=TRANSPOSE(array)
引数は入れ替える範囲か配列の1つだけです。TRANSPOSEは昔からExcelにありますが、Excel 2021より前は配列数式です。先に正しい形の貼り付け先(上の例なら4行3列)を選択し、数式を入力してCtrl+Shift+Enter(MacではCmd+Shift+Enter)を押します。するとExcelは数式を中かっこで囲んで{=TRANSPOSE(A1:D3)}と表示します。Excel 2021とMicrosoft 365では普通にEnterを押すだけで済み、邪魔になる値があると#SPILL!になります。
GoogleスプレッドシートにもTRANSPOSEがあり、同じようにスピルします。
列を行に変える
同じ関数で1つの列を行に変えられます。たとえば名前のリストを列見出しにする場合です:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Name | ||||||
| 2 | Ann | Ann | Ben | Cara | Dan | Eve | |
| 3 | Ben | ||||||
| 4 | Cara | ||||||
| 5 | Dan | ||||||
| 6 | Eve |
C2はAnnからEveまでをC2:G2に横にスピルします。数式が読むのはA2:A6なので、A7に名前を足しても含まれません。含めるには範囲をA2:A7かそれ以上に広げます。
TRANSPOSEで空白のセルが0になる理由
空のセルを指す数式は0を返し、TRANSPOSEも同じです。下のシートでは3月の売上がないので、そのままの数式では元が空の場所に0が表示されます:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 120 | 95 | 150 | |
| 3 | |||||
| 4 | Month | Sales | Month | Sales | |
| 5 | Jan | 120 | Jan | 120 | |
| 6 | Feb | 95 | Feb | 95 | |
| 7 | Mar | 0 | Mar | ||
| 8 | Apr | 150 | Apr | 150 |
B7はMarに0を表示します。2つ目の数式は先にIFで空のセルをそれぞれ空の文字列に変えるので、E7は空白のままです。D2に数値を入力すると、どちらの数式にもそれが表示されます。
複数の行を1つの列にまとめる
マス目全体を1つの列に積み重ねるには、TOCOL(Microsoft 365とExcel 2024)を使います。TOCOLは範囲を1行ずつ読み、TOROWは同じことを1つの行に対して行います:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rep | Q1 | Q2 | Q3 | All values | |
| 2 | Ann | 10 | 12 | 9 | 10 | |
| 3 | Ben | 8 | 11 | 14 | 12 | |
| 4 | 9 | |||||
| 5 | 8 | |||||
| 6 | 11 | |||||
| 7 | 14 |
F2は、Annの行から10、12、9を、続いてBenの行から8、11、14を並べます。代わりに各列を下方向に読むには、3つ目の引数をTRUEにします:=TOCOL(B2:D3,,TRUE)。=TOCOL(B2:D3,1)は空のセルを飛ばします。
練習: 月を横ではなく縦に
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 120 | 95 | 80 | 150 |
| 3 | |||||
| 4 | Months down |
やってみよう: A5で、A1:E2の表の向きを変え、月がA列の下方向に、売上がB列の下方向に並ぶようにしてください。
TRANSPOSEか、行方向の検索か
横に長い表にVLOOKUPを使うためだけに行列を入れ替える人がよくいます。その必要はありません。HLOOKUPとXLOOKUPは行を直接探します。=XLOOKUP("Mar",B1:E1,B2:E2)は、上の横長の表から何も入れ替えずに3月の売上を返します。行列を入れ替えるのは、グラフ、レポート、1行に1件のデータを求めるシステムのように、レイアウトそのものを変えなければならないときです。
よくある質問
Excelで行と列を入れ替えるには?
範囲をコピーし、結果を始めたいセルを右クリックして、形式を選択して貼り付け > 行列を入れ替える を選びます(Ctrl+Alt+Vを押してからE、Enter)。これは固定のコピーを貼り付けます。元のデータと一緒に更新されるコピーにするには、貼り付け先のセルに=TRANSPOSE(A1:D3)と入力します。
TRANSPOSEで空のセルが0になるのはなぜですか?
空のセルを参照する数式は0を返し、TRANSPOSEも例外ではないからです。先に空のセルを空の文字列に置き換えます:=TRANSPOSE(IF(A1:E2="","",A1:E2))。
Excel 2019以前でTRANSPOSEを使うには?
行と列を入れ替えた大きさの貼り付け先(3行4列の元データなら4行3列)を選択し、=TRANSPOSE(A1:D3)と入力してCtrl+Shift+Enter(MacではCmd+Shift+Enter)を押します。Excel 2021以降はEnterだけで済みます。
複数の行を1つの列にするには?
Microsoft 365かExcel 2024でTOCOLを使います。=TOCOL(B2:D3)は範囲を1行ずつ読み、すべての値を1つの列に積み重ねます。=TOCOL(B2:D3,1)は空のセルを飛ばし、TOROWは同じことを1つの行に対して行います。