A の表の縦横を入れ替えて B の表を作成する方法について、コピーと貼り付けで対応するパターンと、数式で対応するパターン 2 つを書きます。

 

コピーと貼り付けで対応する

元の表は削除する予定なので、「今」の状態をひっくり返したいだけならこちらがよいと思います。
元のセル範囲をコピーして貼り付けるときに、貼り付けオプションで [行/列の入れ替え] を選択します。

この場合はコピー元のセル範囲と貼り付け先のセル範囲はそれぞれ独立しているので、たとえば元のセル範囲の値を編集しても貼り付け先には反映されませんが、元のセル範囲を削除しても貼り付けて作成したセル範囲に影響はありません。

TRANSPOSE 関数の数式で対応する (スピル)

元のセル範囲は残したまま、行列を入れ替えた状態の表も欲しい、という場合は数式で対応します。 
TRANSPOSE 関数は、引数として指定した配列 (セル範囲) の行と列を入れ替えた配列を返します。 配列を返す、というのがよくわからない場合は、セル範囲=複数のセルの集まり ということで、結果も複数のセルだと考えればよいでしょう。

構文:=TRANSPOSE(配列)

1. スピルが機能する Excel (Microsoft 365) の場合は配列数式にする必要はないので、左上となるセルを選択して数式を作成します。

2. 数式が作成され、スピルが機能して元のセル範囲の行列を入れ替えた結果が返ります。

書式はもちろんついてきません。数式でセルを参照しているので元のセル範囲の値を編集すると数式で作成した表にも反映されますし、元のセル範囲 (表) を削除したらエラーになります。

なお、元のセルが空白の場合に「0」が返ります。こちらを空白にしたいという場合は IF 関数で処理します。 空白処理については こちら で詳細を説明しているので仕組みを知りたい方はご覧ください。

数式:=TRANSPOSE(IF(A1:F4="","",A1:F4)) 

おまけ

元のセル範囲をテーブルに変換している場合で、なおかつスピルで対応できる場合は、テーブルに行や列が追加されると結果にも反映されます。

元の表がマトリックスなので本来のテーブルの姿ではないし、頻繁に行や列が増えるわけではないならここまで対応する必要はないとおもうけれど、ご参考まで。

TRANSPOSE 関数の数式で対応する (配列数式)

スピルが機能しないバージョンの Excel の場合は、数式を作成するときに配列数式として作成します。 もともとスピルなんてないころから TRANSPOSE 関数はあって、その頃はこうやって使っていました。

1. 結果を表示するセル範囲を選択します。
ここでは、6 行 x 4 列 のセル範囲を選択しています。

2. アクティブになっている左上のセルに数式を入力して、[Ctrl] + [Shift] + [Enter] を実行します。
数式:=TRANSPOSE(A1:F4)

3. 数式が作成され、行列を入れ替えた結果が返ります。

書式はもちろんついてきません。数式でセルを参照しているので元のセル範囲の値を編集すると数式で作成した表にも反映されますし、元のセル範囲 (表) を削除したらエラーになります。

元のセルが空白の場合に「0」が返ります。こちらを空白にしたいという場合は IF 関数で処理します。 空白処理については こちら で詳細を説明しているので仕組みを知りたい方はご覧ください。

数式:=TRANSPOSE(IF(A1:F4="","",A1:F4)) 

 


元の範囲そのものをその場でひっくり返すことはできないので、コピーと貼り付けで対応するか、数式で対応するかですね。 元の表はいらないことが多いのでコピーと貼り付けで対応するケースが多いとは思いますが、手動での処理ではなく頻繁に値やレコードの変わる表をもとに処理をしたいのなら数式で対応するべきでしょう。

石田 かのこ