こんばんは!
VBAでの一例です。
↓の画像のように元データがSheet2(下側)の2行目、A列以降にあるとし、
上側のSheet1に表示するとします。
尚、Sheet3を作業用のSheetとして使用していますので、
Sheet3は全く使用していない状態にしておいてください。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, k As Long, lastRow As Long, lastCol As Long
Dim cnt As Long, wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("Sheet2")
Set wS3 = Worksheets("Sheet3")
Application.ScreenUpdating = False
With Worksheets("Sheet1")
.Cells.Clear
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
If lastRow > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, lastCol)).ClearContents
End If
For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
lastCol = wS2.Cells(i, Columns.Count).End(xlToLeft).Column
Range(wS2.Cells(i, "A"), wS2.Cells(i, lastCol)).Copy
wS3.Range("A2").PasteSpecial Paste:=xlPasteAll, Transpose:=True
lastRow = wS3.Cells(Rows.Count, "A").End(xlUp).Row
wS3.Range("A1") = "ダミー"
Range(wS3.Cells(1, "A"), wS3.Cells(lastRow, "A")).AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("C1"), unique:=True
lastRow = wS3.Cells(Rows.Count, "C").End(xlUp).Row
Range(wS3.Cells(2, "D"), wS3.Cells(lastRow, "D")).Formula = "=COUNTIF(A:A,C2)"
With Range(wS3.Cells(2, "B"), wS3.Cells(lastRow, "B"))
.Formula = "=D2/(COUNTA(A:A)-1)"
.Value = .Value
.Style = "Percent"
End With
Range(wS3.Cells(2, "B"), wS3.Cells(lastRow, "D")).Sort key1:=wS3.Range("B2"), order1:=xlDescending, Header:=xlNo
For k = 2 To lastRow
wS3.Cells(k, "B").Resize(, 2).Copy .Cells(i, (k - 1) * 2 - 1)
Next k
wS3.Range("A:D").Clear
Next i
For i = 1 To .UsedRange.Columns.Count Step 2
cnt = cnt + 1
With .Cells(1, i)
.Value = "出現率"
.Offset(, 1) = cnt & "位"
End With
Next i
.Columns.AutoFit
.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
End With
Application.ScreenUpdating = True
End Sub 'この行まで
※ じっくり考えればもっと簡単に出来るかもしれませんが、
とりあえずはこの程度で・・・m(_ _)m
お礼
有難うございます。