Excelのクロス集計表から縦持ちのテーブルに変換する方法


# 基礎編
下記に示すような、行ラベルと列ラベルの両方に集計キーが記載されているようなクロス集計表を縦持ちデータに変換する方法を記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/8d8ab5a5-573b-bd7f-c145-ef9077dbf14a.png)

1.「Alt → D → P」の順にショートカットを押し、ピボットテーブルウィザードを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/a5ba0d03-efa3-72ed-c12b-ee887a453558.png)

2.「複数のワークシート範囲」と「ピボットテーブル」にチェックを入れ、「次へ」を選択します。

3.「指定」にチェックを入れ、「次へ」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/d04fce84-69ac-2452-4245-50510c88f559.png)

3.「範囲」に対象のクロス集計を選択し、「追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/5dd8e7ad-e250-dcde-c26f-48ff1be9930c.png)

4.「範囲一覧」に対象のクロス集計が反映されたことを確認したら、「次へ」を選択します。(他の項目はデフォルト設定のままで問題ありません。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/11650d72-c237-323c-145b-c44f6bd9fa9d.png)

5.「新規ワークシート」にチェックを入れ、「完了」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/af73a655-6f54-508a-d277-6bec5e0f5b6a.png)

6.作成されたピボットテーブルの総計×総計のセル(最も右下)でダブルクリックする、もしくは、右クリック → 「詳細の表示」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/a839f36b-fcbe-6279-c064-72a1fbb59f11.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/965f12a8-19b2-7294-7e98-c15f82ebd62d.png)

7.上記の手順を踏んだ結果、クロス集計を縦持ちテーブルに変換することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/fde73c03-491d-56e7-4430-52b0dc84276f.png)

(8.行ラベルの項目が表示されなかった場合)
ExcelのVersionによっては行ラベルの項目が表示されていないことがあります。その場合は「テーブルデザイン」タブ >  「最初の行」にチェックを入れることで表示されます。

# 応用編
列ラベルや行ラベルに複数のカラムが指定してある場合はExcel自体は対応しておりません。
しかし、一工夫加えると同様に高階インデックスにも対応できるようになります。

応用1.
次のように行ラベルに性別と年齢という2つの集計軸があるようなクロス集計です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/4041af3c-39dd-ea9b-e6ce-7cfb966e81db.png)

応用2.
列ラベルに新規の列を挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/a97623ff-26b6-a176-ec35-083b5d6aa63a.png)

応用3.
挿入した行に関数を入力します。
=集計ラベル1 & "|" & 集計ラベル2
ここで、「｜」や「;」など区切り文字を入れることがポイントです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/f16322a5-67ea-752e-2d61-16dd6827e517.png)

応用4.
オートフィルを適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/7201c93f-2687-bf78-4c67-c454401934e9.png)

応用5.
下図の選択範囲を新たなクロス集計表とみなして、基礎編で行ったときと同様の手順でピボットテーブルを作成します。("新規クロス集計"と呼称)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/f62dab2f-e450-4ff2-79a5-1c7b35939362.png)

応用6.
途中省略

応用7.
範囲に"新規クロス集計"部分を選択し、「完了」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/1954a609-f4de-d8f5-db4a-88e136af9129.png)

応用8.総計×総計のセルをダブルクリック。

応用9.縦持ちターブルが作成されたら、1列挿入する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/e229945b-1c19-f681-839c-670457ac019b.png)

応用10.A列を選択した状態で、区切り位置ウィザードを起動します。
区切り文字指定の項目に「その他」にチェックを入れた状態で、区切り文字の「|」を入力し、「完了」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/5e1acde0-5189-c881-b85a-1d410aa609a9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/1ebf8b65-24e9-60e2-e3f4-5cbde66abe63.png)

応用11.
カラム名を適切な名前に変更し、手続きが終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274248/7c743f5c-db3c-f71b-cc1b-1e8c7039be48.png)

# 備考
ちなみに、同様の内容をpythonのフレームワークであるpandasを使用して実行しようとした場合は、pandas.melt()というメソッドを使用するのがおすすめです。