目次
このチュートリアルでは、Excelで行と列を入れ替えるさまざまな方法(数式、VBAコード、特殊なツール)を紹介します。
Excelのデータの転置は、多くのユーザーにとって身近な作業です。 複雑な表を作成した後、より良い分析やグラフでのデータ表示のために、表を回転させることが非常に理にかなっていることに気付くことがよくあります。
この記事では、行を列に変換する(または列を行に変換する)方法をいくつか紹介します(どちらでも同じです)。
エクセルで「貼り付け特技」を使って行を列に変換する
下の図の上部にあるようなデータセットがあるとします。 国名は列で整理されていますが、国のリストが長すぎるので、列を行に変えて画面に収まるようにしましょう。
行と列を入れ替えるには、以下の手順で行います。
- 元のデータを選択します。 表全体、つまりスプレッドシートのデータのあるすべてのセルをすばやく選択するには、Ctrl + Home を押しながら Ctrl + Shift + End ... を押します。
- 選択したセルをコピーするには、選択範囲を右クリックし、次のようにします。 コピー をコンテキストメニューから選択するか、Ctrl + C を押してください。
- 移動先範囲の最初のセルを選択します。
コピー領域とペースト領域が重ならないように、必ず元のデータを含む範囲外のセルを選択してください。 例えば、現在4列10行のテーブルがある場合、変換後のテーブルは10列4行になります。
関連項目: Excelでマクロを有効化・無効化する方法 - 移動先のセルを右クリックし ペースト・スペシャル を選択し、コンテキストメニューから トランスポーズ .
詳しくは、「Excelの貼り付け特化の使い方」をご覧ください。
ソースデータに数式が含まれている場合、数式を調整するか、特定のセルに固定するかによって、相対参照と絶対参照を適切に使い分ける必要があることに注意してください。
このように、「特殊貼り付け」機能を使えば、行と列、列と行の変換を文字通り数秒で行うことができます。 この方法は、元のデータの書式もコピーするので、もう一つ有利な点があります。
しかし、この方法は 二律背反 そのため、Excelのデータ転置のための完璧なソリューションと呼ぶことはできません。
- 完全に機能するExcelの表を回転させるのにはあまり向いていません。 表全体をコピーして、その後に開くと ペースト・スペシャル ダイアログで トランスポーズ この場合、列見出しのないテーブルをコピーするか、先に範囲に変換しておく必要があります。
- ペースト・スペシャル > トランスポーズ は、新しいテーブルと元のデータをリンクしないので、一度だけの変換にしか向いていません。 ソースデータが変わるたびに、このプロセスを繰り返し、新たにテーブルを回転させる必要があります。 同じ行や列を何度も切り替えて時間を浪費したくないですよね?
表を転置して元のデータにリンクさせる方法
では、おなじみの ペースト・スペシャル この方法の最大の特徴は、ソーステーブルのデータを変更すると、反転したテーブルにもその変更が反映され、それに応じて更新されることです。
- 列に変換したい行(または列に変更したい列)をコピーします。
- 同じワークシートまたは別のワークシートにある空のセルを選択します。
- を開く ペースト・スペシャル ダイアログを開き、前の例で説明したように リンクの貼り付け を左下に表示します。
このような結果が得られます。
これで、下のスクリーンショットのように、テーブルがちょっと怖いものに変わりますが、慌てずにあと2ステップで、目的の結果が得られます。
この方法の唯一の欠点は、元の書式が失われるため、手動で復元する必要があることです(このチュートリアルの後半で、これを行う簡単な方法を紹介します)。
Excelで数式を使って転置する方法
Excelで列と行を動的に切り替えるには、TRANSPOSEまたはINDEX/ADDRESS式を使用するのが手っ取り早い方法です。 前の例と同様に、これらの式も元のデータへの接続を維持しますが、動作が少し異なります。
TRANSPOSE関数を使ってExcelの行を列に変更する
TRANSPOSE関数は、その名の通り、Excelでデータの転置を行うために特別に設計された関数です。
=TRANSPOSE(配列)この例では、米国の州を人口順に並べた別の表を変換します。
- 元の表の行と列の数を数え、同じ数の空白のセルを、反対方向に選択します。
例えば、サンプルの表は見出しを含めて7列6行ですが、TRANSPOSE関数は列を行に変更するので、6列7行の範囲を選択します。
- 空のセルを選択した状態で、次の数式を入力します。
=transpose(a1:g6)
- この数式は複数のセルに適用する必要があるため、Ctrl + Shift + Enterキーを押して配列数式にします。
すると、列が行に変わり、思い通りになりました。
TRANSPOSE機能のメリット
TRANSPOSE 機能を使用する主な利点は、回転したテーブルがソーステーブルとの接続を保持し、ソースデータを変更するたびに、それに応じて転 置されたテーブルが変更されることです。
TRANSPOSE機能の弱点。
- 上のスクリーンショットにあるように、変換後の表には元の表の書式は保存されません。
- 元の表に空のセルがある場合、転置されたセルには代わりに0が含まれます。 これを修正するには、この例で説明したようにTRANSPOSEとIF関数を組み合わせて使用します:ゼロを使わずに転置する方法。
- 回転した表は元データに大きく依存しているため、セルの編集はできません。 セルの値を変更しようとすると、「配列の一部を変更できません」というエラーが発生します。
最後に、TRANSPOSE機能がどんなに優れていて使いやすいものであっても、柔軟性に欠けるため、多くの場合、最適な方法とは言えないかもしれません。
詳しくは、Excel TRANSPOSE関数(例題付き)をご覧ください。
INDIRECT関数とADDRESS関数で行から列へ変換する
この例では、2つの関数を組み合わせて使用しますが、これは少し厄介です。 そこで、数式に集中できるように小さなテーブルを回転させましょう。
4列(A〜D)、5行(1〜5)のデータがあるとします。
列が行に切り替わるようにするには、次のようにします。
- 移動先の範囲の一番左のセル(A7)に以下の数式を入力し、Enterキーを押します。
=indirect(アドレス(列(a1),行(a1)))
- 選択したセルの右下にある小さな黒い十字をドラッグして、必要な数の行と列に数式を右方向と下方向にコピーします。
これで完了です!新しく作成されたテーブルでは、すべての列が行に切り替わっています。
もし、データが1以外の行、A以外の列から始まっている場合は、もう少し複雑な数式を使う必要があります。
=indirect(address(column(a1) - column($a$1) + row($a$1)), row(a1) - row($a$1) + column($a$1)))
ここで、A1 はソーステーブルの左上のセルです。 また、セルの絶対参照と相対参照の使い分けに注意してください。
しかし、移し替えられたセルは、元のデータと比べて非常に地味で、くすんだ印象になります。
しかし、がっかりしないでください。この問題は簡単に解決できます。 元のフォーマットに戻すには、次のようにします。
- 元のテーブルをコピーします。
- 出来上がったテーブルを選択します。
- できた表を右クリックし 貼り付けオプション > 書式設定 .
メリット この数式は,Excelで行を列に変換するための,より柔軟な方法を提供します. 配列の数式ではなく,通常の数式を使用するため,変換された表で任意の変更を行うことが可能です.
欠点 しかし、上の図のように、すぐに復元することができます。
この式の仕組み
INDIRECT / ADDRESS の組み合わせの使い方がわかったところで、この式が実際に何を行っているのか、洞察を得たいと思うかもしれません。
INDIRECTはその名の通り、セルを間接的に参照するための関数です。 しかし、INDIRECTの本当の力は、他の関数や他のセルの値を使って構築した文字列も含めて、あらゆる文字列を参照に変えることができることです。 まさにこれから行うことです。 ここまで来れば、後は簡単に理解できるでしょう : )
ADDRESS、COLUMN、ROWの3つの関数が使われていることを思い出してください。
ADDRESS関数は、指定した行番号と列番号でそれぞれセルのアドレスを取得します。 順番は、1番目-行、2番目-列と覚えておいてください。
この式では、座標を逆の順序で与えていますが、これが実際に効果を発揮します!言い換えれば、この式のこの部分 ADDRESS(COLUMN(A1),ROW(A1)) は、行と列を入れ替えます。つまり、列番号を受け取って行番号に変更し、行番号を受け取って列番号に変更するのです。
最後にINDIRECT関数で回転したデータを出力しています。 何も恐ろしいことはないでしょう?
ExcelでVBAマクロを使用してデータを転置する
Excelで行から列への変換を自動化するには、以下のマクロを使用します。
Sub TransposeColumnsRows() Dim SourceRange As Range Dim DestRange As Range Set SourceRange = Application.InputBox(Prompt:="Please select range to transpose" , Title:="Transpose Rows to Columns" , Type :=8) Set DestRange = Application.InputBox(Prompt:="Select the upper left cell of destination range" , Title:="Transpose Rows to Columns" , Type :=8) SourceRange.Copy DestRange.Select.Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= False , Transpose:= True Application.CutCopyMode = False End Subワークシートにマクロを追加するには、「ExcelでVBAコードを挿入して実行する方法」に記載されているガイドラインに従ってください。
注)VBAでの転置は、65536要素までという制限があります。 配列がこの制限を超えた場合、余分なデータは黙って捨てられてしまいます。
行と列を変換するマクロの使い方
ワークブックにマクロを挿入した状態で、以下の手順でテーブルを回転させます。
- 対象のワークシートを開き、Alt + F8 キーを押しながら、以下の項目を選択します。 TransposeColumnsRows マクロを実行し 実行 .
出来上がりをお楽しみに :)
転置ツールで列と行を入れ替える
行から列への変換を定期的に行う必要がある場合、より高速でシンプルな方法を探しているかもしれません。 幸いにも、私のExcelにはそのような方法がありますし、当社のUltimate Suiteの他のユーザーも同様です :)
Excelの行と列を文字通り2クリックで切り替える方法を紹介しましょう。
- 表内の任意のセルを選択し、[Select] ボタンをクリックします。 エイブルビット tab> トランスフォーム グループをクリックし トランスポーズ ボタンをクリックします。
もし、あなたが 値の貼り付けのみ または ソースデータへのリンクの作成 元の表を変更するたびに回転した表が自動的に更新されるようにするには、対応するオプションを選択します。
完了!表が入れ替わり、書式も維持され、これ以上の操作は必要ありません。
この他にも70以上のExcel用プロフェッショナルツールを試してみたい方は、ぜひUltimate Suiteの試用版をダウンロードしてください。 それでは、また来週のブログでお会いしましょう。