588号を担当いたします保科(ほしな)です。
物流現場に限らず、会社にはさまざまなデータが存在します。その中でも「クロス表」は頻繁に目にする形式のひとつです。クロス表は視覚的にわかりやすく、データの全体像を把握するのに適しています。しかし、集計や分析に活用する際には、リスト形式(データベース型)に作り直す必要が生じることが少なくありません。
そこで、本記事では、クロス表をリスト形式に変換する3つの方法をご紹介したいと思います。
l クロス表とは
「商品 × 月」のように、行と列の二方向にデータを展開した表を指します。視覚的に整理されており、全体を俯瞰しやすいのが特徴です。

l リスト形式とは
1行に「商品」「月」「数量」といった情報をまとめた、データベース型の表形式です。この形式に変換することで、集計・分析などのデータ活用が格段にしやすくなります。

方法1: ピボットテーブル/ピボットグラフウィザードを使う
この方法は、Excel 2003以前の名残ですが、今も「アドイン操作」で使える便利機能です。クロス表の「総計」が交差するセルをダブルクリックすることで、その総計のもとになったデータリストを抽出するという裏技的な手順です。古いExcelでも使えますし、一度きりの変換ならこの方法がおすすめです。
1. ウィザードの起動
クロス集計表が表示されているシートで、ショートカットキー[Alt] → [D] → [P]の順にキーを押して「ピボットテーブル/ピボットグラフ ウィザード」を起動します。
2. レポートの種類の選択
「複数のワークシート範囲」を選択します。(※集計表は1つですが、この選択がポイント)
※通常、単一のデータ範囲からピボットテーブルを作成する場合、Excelはその元データを分析しますが、すでに集計されたクロス表を元データとして扱わせるためには、特殊な指定が必要です。
Excelに対して「このデータは元データではないが、強制的に元データとして扱い、後にデータを吐き出すための準備をしておけ」という指示です。
「作成するレポートの種類」は「ピボットテーブル」が選択されていることを確認し、[次へ]をクリックします。

3. フィールドの作成方法の指定
「指定」を選択し、[次へ]をクリックします。

4. データ範囲の指定
「範囲」にカーソルを置きます。
縦方向と横方向の見出しを含めて、クロス表のデータ範囲を選択します。
注意点:合計値(総計)の列と行は含めないようにします
[追加]をクリックし、範囲一覧に追加されたことを確認して[次へ]をクリックします。


5. 作成先の指定と完了
「新規ワークシート」を選択し、[完了]をクリックします。

6. リスト形式への変換
新しく作成されたピボットテーブルシートに移動します。
ピボットテーブルの縦と横の総計が交差するセル(通常は右下の総計セル)をダブルクリックします。

新しいシートに、元のクロス表のリスト形式が作成されました。

「商品名」「月」「数量」の列見出しを作成して完成です。
方法2: Power Queryの「列のピボット解除」を使う(Excel 2013以降推奨)
Excel 2013以降で利用でき、より直感的かつ柔軟にクロス表を変換することができます。少し処理について学習する必要がありますが、大規模データでも処理速度が早く、確立されたステップを数クリックで変換できるため、定期処理をする際に向いています。
1. テーブルへの変換
クロス表のセル範囲を選択し、[挿入]タブの[テーブル]をクリックします。(または、表内のセルを選択してショートカットキー[Ctrl] + [T])
2. Power Queryエディターの起動
テーブル内の任意のセルを選択した状態で、[データ]タブの[テーブルまたは範囲から](または[データの取得と変換]グループ内)をクリックします。

テーブルの範囲を選択します。(合計値を含めない)

Power Query エディターが起動します。
3. ピボット解除の対象列の選択
データリスト化したい項目(列の見出しになっている部分)の列(「1月」「2月」・・・など)をすべて選択します。

4. 列のピボット解除
[変換]タブの[列のピボット解除]をクリックします。
選択した列が「属性(元の列の見出し)」と「値(元のデータ)」の2列に変換され、リスト形式になります。
列名をそれぞれ変更します。(属性→月、値→数量)


5. Excelへの読み込み
[ホーム]タブの[閉じて読み込む] → [閉じて読み込む]をクリックします。
変換されたリスト形式のデータが新しいシートに作成されました。

方法3:関数を使う
少し応用的な方法ですが、Excel関数を組み合わせることでクロス表をリスト形式に変換することもできます。数式が自動で処理しリスト表をリアルタイムで更新するため、人為的な更新忘れを防ぎます。複数人で使用するようなシートに向いています。
関数の組み合わせはさまざまありますが、今回はINDEXやTOCOL関数を用いて、商品名や月を必要な回数だけ繰り返し展開させようと思います。
下図のようなクロス表がA1:H6にあるとします

商品名(行見出し)、月(列見出し)、数量の3つをそれぞれ縦に並べます。
下記の(ア)~(ウ)関数をJ2、K2、L2にそれぞれ記載してください。
(ア) =INDEX($A$2:$A$5,QUOTIENT(SEQUENCE(ROWS(B2:G5)*COLUMNS(B2:G5))-1,COLUMNS(B2:G5))+1)
解説:指定された行見出し($A$2:$A$5、つまり商品A、商品Bなど)を、データ本体の列数(この場合は6ヶ月分)だけ繰り返して、一つの列に順番に並べます
(イ) =INDEX($B$1:$G$1,MOD(SEQUENCE(ROWS(B2:G5)*COLUMNS(B2:G5))-1, COLUMNS(B2:G5)) +1)
解説:指定された列見出し($B$1:$G$1、つまり1月、2月など)を、データ本体の行数(この場合は4つの商品分)だけ繰り返して、一つの列に順番に並べます
(ウ) =TOCOL(B2:G5, 1)
解説:クロス表のデータ本体を、空白セルやエラーを無視して一つの長いリスト(列)に変換します
J1~L1に「商品名」「月」「数量」の列見出しを作成して完成です。

| INDEX | 配列の中から行番号と列番号に基づいて特定の値を取り出す |
| QUOTIENT | 割り算の小数点以下を切り捨てた整数部分(商)を返す |
| MOD | 割り算の余り(剰余)を返す |
| SEQUENCE | 行数と列数の連番の配列を自動的に生成する |
| ROWS | 行の数を返す |
| COLUMNS | 列の数を返す |
| TOCOL | 指定した配列や範囲のすべての値を一つの列にまとめて展開する |
まとめ
一度きりの変換なら「ピボットウィザード」、定期的な処理なら「Power Query」、高度な応用をしたい、更新を自動で表示させたいなら「関数で変換」など、目的と用途に応じて最適な方法を選ぶことで、クロス表をもっと有効に活用できます。
業務でクロス表を扱う機会が多い方は、ぜひ方法2の「Power Query」を習得してみてください。日々の集計作業が驚くほど効率化されますよ。
(文責:保科 真里)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(ロジ・ソリューション(株) メールマガジン/ばんばん通信第588号 2025年12月10日)
★掲載された記事の内容を許可なく転載することはご遠慮ください。
ロジ・ソリューションでは、物流に関するいろいろなご支援をさせていただいております。何かお困りのことがありましたらぜひお声掛けください。(お問い合わせはこちら)
Excelに関するお役立ち記事も多数ございますのでぜひこちらもご覧ください。


