- ベストアンサー
Excelを使って分布表を作る方法
- Excelを使って一覧データを分布表に可視化する方法について解説します。
- ピボットテーブルを使用してデータを集計し、分布表を作成する方法をご紹介します。
- Excelの機能を活用して、データの個数や値をもとに分布表を作成するテクニックをご紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! VBAでの一例です。 ↓の画像で左側がSheet1(元データ)で右側のSheet2に表示するとします。 (Sheet1の表のレイアウトは画像のように1行目が項目行で、2行目以降にデータがあるとします) Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストし、Excel画面に戻ってマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, j As Long, k As Long, wS1 As Worksheet Set wS1 = Worksheets("Sheet1") With Worksheets("Sheet2") .Cells.ClearContents For i = 2 To wS1.Cells(Rows.Count, "A").End(xlUp).Row If WorksheetFunction.CountIf(.Range("A:A"), wS1.Cells(i, "A")) = 0 Then .Cells(Rows.Count, "A").End(xlUp).Offset(1) = wS1.Cells(i, "A") End If If WorksheetFunction.CountIf(.Rows(1), wS1.Cells(i, "B")) = 0 Then .Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = wS1.Cells(i, "B") End If k = WorksheetFunction.Match(wS1.Cells(i, "A"), .Range("A:A"), False) j = WorksheetFunction.Match(wS1.Cells(i, "B"), .Rows(1), False) If .Cells(k, j) = "" Then .Cells(k, j) = wS1.Cells(i, "C") Else .Cells(k, j) = .Cells(k, j) & vbCrLf & wS1.Cells(i, "C") End If Next i .Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous End With End Sub 'この行まで ※ 関数でないのでSheet1のデータ変更があるたびにマクロを実行する必要があります。m(_ _)m
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
手抜きせず丁寧に,まず下記のように通し番号を計算します。 A列B列C列 D列 あ A あ-A-1 佐藤 い A い-A-1 高橋 い B い-B-1 鈴木 A A あ-A-2 近藤 ご利用のエクセルのバージョンも不明のご相談ですが,エクセル2007以降を使い C2: =IF(COUNTA(A2:B2)=2,A2&"-"&B2&-COUNTIFS($A$2:A2,A2,$B$2:B2,B2),"") 以下コピー と並べておきます。 あのAの枠には =IF(ROW(A1)>COUNTIFS(A:A,"あ",B:B,"A"),"",VLOOKUP("あ"&"-"&"A"&"-"ROW(A1),C:D,2,FALSE)) と記入し,下向けにコピーしておきます。 もちろん式中の「"あ"」だの「"A"」だのの部分には,あなたが作成した一覧表の該当セルを当てはめて作成します。 >ピボット ピボットテーブルレポートでは、勿論そういう並べ替えはできません。 エクセルは基本「集計」をするソフトなので,ご相談のように「見た目良く並べ替える」機能は殆ど期待できません。
お礼
ご回答ありがとうございます。 バージョンの記載が漏れていてすいませんでした。 バージョンは2010です。 やはりピボットではできませんでしたか。 諦めます。 ありがとうございました。
お礼
ご回答ありがとうございます。 やはりVBAでの実装になってしまいますよね・・・ あまり経験はないですが、トライしてみます。 ありがとうございました。