メインコンテンツへスキップ

Excelで行列スタイルの表をXNUMX列に変換するにはどうすればよいですか?

列見出しと行見出しを含むマトリックススタイルのテーブルがあり、このスタイルのテーブルをXNUMX列のテーブルに変換したい場合、次のスクリーンショットのようにリストテーブルとも呼ばれます。これを解決する良い方法はありますか? Excelの問題?

ピボットテーブルを使用して、行列スタイルのテーブルをリストに変換します

マトリックススタイルのテーブルをVBAコードでリストに変換する

マトリックススタイルのテーブルをKutoolsforExcelでリストに変換する

docは行列をリスト1に変換します


Excelでは、マトリックススタイルのテーブルをXNUMX列のテーブルに変換する直接的な機能はありませんが、ピボットテーブルに精通している場合は、それが役立つ場合があります。 次の手順で実行してください。

1。 使用するワークシートをアクティブにしてから、 Altキー+ D、を押してから P キーボードで、飛び出した ピボットテーブルとピボットグラフウィザード ダイアログ、選択 複数の統合範囲分析したいデータはどこにありますか セクションをクリックしてから、 ピボットテーブルどのようなレポートを作成しますか セクション、スクリーンショットを参照してください:

docは行列をリスト2に変換します

2。 次に、をクリックします Next ボタン、で ステップ2a / 3 ウィザードで、 ページフィールドを作成します オプション、スクリーンショットを参照してください:

docは行列をリスト3に変換します

3。 クリックしてください Next ボタン、で ステップ2bof 3 ウィザードをクリックします。 docは行列をリスト5に変換します ボタンをクリックして変換するデータ範囲を選択し、をクリックします Add データ範囲をに追加するボタン すべての範囲 リストボックス、スクリーンショットを参照:

docは行列をリスト4に変換します

4。 をクリックします Next ボタン、で 3の3ステップ ウィザードで、必要に応じてピボットテーブルの場所を選択します。

docは行列をリスト6に変換します

5。 次に、をクリックします 終了 ボタンをクリックすると、ピボットテーブルが一度に作成されます。スクリーンショットを参照してください。

docは行列をリスト7に変換します

6。 ピボットテーブルで、総計の交差するセルをダブルクリックします。この場合、セルF22をダブルクリックすると、次のスクリーンショットのようにXNUMX列のテーブルが生成されます。

docは行列をリスト8に変換します

7。 そして最後に、テーブルを選択してから選択することにより、テーブル形式を通常の範囲に変換できます。 > 範囲に変換 コンテキストメニューから、スクリーンショットを参照してください。

docは行列をリスト9に変換します


最初の方法が気に入らない場合は、次のVBAコードも役立ちます。

1。 押す Altキー+ F11 を表示する アプリケーション向け Microsoft Visual Basic 窓。

2。 ウィンドウで、をクリックします インセット > モジュール 新しいモジュールウィンドウを表示するには、次のVBAコードをコピーしてモジュールウィンドウに貼り付けます。

VBAコード:マトリックススタイルのテーブルをリストに変換する

Sub ConvertTable()
'Update 20150512
Dim Rng As Range
Dim cRng As Range
Dim rRng As Range
Dim xOutRng As Range
xTitleId = "KutoolsforExcel"
Set cRng = Application.InputBox("Select your Column labels", xTitleId, Type:=8)
Set rRng = Application.InputBox("Select Your Row Labels", xTitleId, Type:=8)
Set Rng = Application.InputBox("Select your data", xTitleId, Type:=8)
Set outRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Set xWs = Rng.Worksheet
k = 1
xColumns = rRng.Column
xRow = cRng.Row
For i = Rng.Rows(1).Row To Rng.Rows(1).Row + Rng.Rows.Count - 1
    For j = Rng.Columns(1).Column To Rng.Columns(1).Column + Rng.Columns.Count - 1
        outRng.Cells(k, 1) = xWs.Cells(i, xColumns)
        outRng.Cells(k, 2) = xWs.Cells(xRow, j)
        outRng.Cells(k, 3) = xWs.Cells(i, j)
        k = k + 1
    Next j
Next i
End Sub

3。 次に、 F5 このコードを実行するためのキーを押すと、データの列ラベルを選択するためのプロンプトボックスが表示されます。スクリーンショットを参照してください。

docは行列をリスト10に変換します

4。 そして、 OK ボタンをクリックし、次のプロンプトボックスで、行ラベルを選択します。スクリーンショットを参照してください。

docは行列をリスト11に変換します

5。 クリックしてください OK、次にプロンプ​​トボックスで列と行の見出しを除くデータ範囲を選択します。スクリーンショットを参照してください。

docは行列をリスト12に変換します

6。 そして、 OK、このダイアログボックスで、結果を検索するセルを選択してください。 スクリーンショットを参照してください:

docは行列をリスト13に変換します

7。 最後に、 OK、およびXNUMX列のテーブルを一度に取得します。


上記の方法はどちらもやや面倒ですが、ここでは簡単な方法を紹介します- Kutools for Excelそのと 転置テーブルの寸法 この機能を使用すると、セルのマトリックスとリストテーブルの間ですばやく変換できます。

Kutools for Excel : 300以上の便利なExcelアドインがあり、30日以内に制限なしで無料で試すことができます

インストールした後 Kutools for Excel、次の手順に従ってください。

1に設定します。 OK をクリックします。 クツール > レンジ > 転置テーブルの寸法、スクリーンショットを参照してください:

2。 の中に 転置テーブルの寸法 ダイアログボックス:

(1.)選択 リストするクロステーブル 下のオプション 転置型.

(2.)次にクリック docは行列をリスト5に変換します 下のボタン ソース範囲 変換するデータ範囲を選択します。

(3.)次にクリックします docは行列をリスト5に変換します 下のボタン 結果の範囲 結果を配置するセルを選択します。

docは行列をリスト15に変換します

3。 そして、 OK ボタンをクリックすると、元のセルの書式設定を含む次の結果が得られます。

docは行列をリスト16に変換します

このユーティリティを使用すると、 フラットリストテーブルを2次元クロステーブルに変換します.

この転置テーブルディメンション機能の詳細については、こちらをご覧ください。

今すぐExcel用のKutoolsをダウンロードして無料トライアル!


Kutools for Excel:300以上の便利なExcelアドインがあり、30日以内に制限なしで無料で試すことができます。 今すぐダウンロードして無料トライアル!

最高のオフィス生産性向上ツール

人気の機能: 重複を検索、強調表示、または識別する   |  空白行を削除する   |  データを失わずに列またはセルを結合する   |   数式なしのラウンド ...
スーパールックアップ: 複数の基準の VLookup    複数の値の VLookup  |   複数のシートにわたる VLookup   |   ファジールックアップ ....
詳細ドロップダウン リスト: ドロップダウンリストを素早く作成する   |  依存関係のドロップダウン リスト   |  複数選択のドロップダウンリスト ....
列マネージャー: 特定の数の列を追加する  |  列の移動  |  Toggle 非表示列の表示ステータス  |  範囲と列の比較 ...
注目の機能: グリッドフォーカス   |  デザインビュー   |   ビッグフォーミュラバー    ワークブックとシートマネージャー   |  リソースライブラリ (自動テキスト)   |  日付ピッカー   |  ワークシートを組み合わせる   |  セルの暗号化/復号化    リストごとにメールを送信する   |  スーパーフィルター   |   特殊フィルター (太字/斜体/取り消し線をフィルター...) ...
上位 15 のツールセット12 テキスト 工具 (テキストを追加, 文字を削除する、...)   |   50+ チャート 種類 (ガントチャート、...)   |   40+ 実用的 (誕生日に基づいて年齢を計算する、...)   |   19 挿入 工具 (QRコードを挿入, パスから画像を挿入、...)   |   12 変換 工具 (数字から言葉へ, 通貨の換算、...)   |   7 マージ&スプリット 工具 (高度な結合行, 分割セル、...)   |   ... もっと

Kutools for Excel で Excel スキルを強化し、これまでにない効率を体験してください。 Kutools for Excelは、生産性を向上させ、時間を節約するための300以上の高度な機能を提供します。  最も必要な機能を入手するにはここをクリックしてください...

kteタブ201905


Officeタブは、タブ付きのインターフェイスをOfficeにもたらし、作​​業をはるかに簡単にします

  • Word、Excel、PowerPointでタブ付きの編集と読み取りを有効にする、パブリッシャー、アクセス、Visioおよびプロジェクト。
  • 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
  • 生産性を 50% 向上させ、毎日何百回もマウス クリックを減らすことができます!
Comments (10)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Thanks for the tips. It's greatly saved my time and manual efforts.
This comment was minimized by the moderator on the site
Anybody know how to do this in a mac?
This comment was minimized by the moderator on the site
Sub ConvertTable_UseThis()

Dim Rng As Range
Dim cRng As Range
Dim rRng As Range
Dim xOutRng As Range
Dim xRng As Range, cRow As Integer, cCol As Integer


xTitleId = "Convert Table"
Set xRng = Application.Selection
Set xRng = Application.InputBox("Please select range:", "Number Range", Selection.Address, , , , , 8)
cRow = xRng.Rows.Count
cCol = xRng.Columns.Count


Set cRng = Range(xRng.Cells(1, 2), xRng.Cells(1, cCol))
Set rRng = Range(xRng.Cells(2, 1), xRng.Cells(cRow, 1))
Set Rng = Range(xRng.Cells(2, 2), xRng.Cells(cRow, cCol))
Set outRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Set xWs = Rng.Worksheet
k = 1
xColumns = rRng.Column
xRow = cRng.Row
For i = Rng.Rows(1).Row To Rng.Rows(1).Row + Rng.Rows.Count - 1
For j = Rng.Columns(1).Column To Rng.Columns(1).Column + Rng.Columns.Count - 1
outRng.Cells(k, 1) = xWs.Cells(i, xColumns)
outRng.Cells(k, 2) = xWs.Cells(xRow, j)
outRng.Cells(k, 3) = xWs.Cells(i, j)
k = k + 1
Next j
Next i
End Sub
This comment was minimized by the moderator on the site
For the VBA Code, one seems to really need this:xColumns = cRng.Column
xRow = rRng.Row
This comment was minimized by the moderator on the site
do you have a code with a tweak where the leftmost column of a selection is column labels and the topmost row of a selection is row labels?

Thanks in advance,
This comment was minimized by the moderator on the site
Sub ConvertTable_UseThis()

Dim Rng As Range
Dim cRng As Range
Dim rRng As Range
Dim xOutRng As Range
Dim xRng As Range, cRow As Integer, cCol As Integer


xTitleId = "Convert Table"
Set xRng = Application.Selection
Set xRng = Application.InputBox("Please select range:", "Number Range", Selection.Address, , , , , 8)
cRow = xRng.Rows.Count
cCol = xRng.Columns.Count


Set cRng = Range(xRng.Cells(1, 2), xRng.Cells(1, cCol))
Set rRng = Range(xRng.Cells(2, 1), xRng.Cells(cRow, 1))
Set Rng = Range(xRng.Cells(2, 2), xRng.Cells(cRow, cCol))
Set outRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Set xWs = Rng.Worksheet
k = 1
xColumns = rRng.Column
xRow = cRng.Row
For i = Rng.Rows(1).Row To Rng.Rows(1).Row + Rng.Rows.Count - 1
For j = Rng.Columns(1).Column To Rng.Columns(1).Column + Rng.Columns.Count - 1
outRng.Cells(k, 1) = xWs.Cells(i, xColumns)
outRng.Cells(k, 2) = xWs.Cells(xRow, j)
outRng.Cells(k, 3) = xWs.Cells(i, j)
k = k + 1
Next j
Next i
End Sub
This comment was minimized by the moderator on the site
Thanks a Ton, really appreciate the way you have explained. very useful
This comment was minimized by the moderator on the site
Thanks alot for this useful tool
This comment was minimized by the moderator on the site
Thanks, this was exactly what I was looking for. Awesome:)
This comment was minimized by the moderator on the site
what if i have 4 or more column?
There are no comments posted here yet
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations