変換されたテーブルを新しいシートに配置する VBA ソリューションを次に示します。
Sub tgr()
Dim wsData As Worksheet
Dim wsDest As Worksheet
Dim NameCell As Range
Dim rngFound As Range
Dim arrData() As Variant
Dim strFirst As String
Dim DataIndex As Long
Dim cIndex As Long
Set wsData = ActiveSheet
Set wsDest = Sheets.Add(After:=Sheets(Sheets.Count))
wsData.Range("A1", wsData.Cells(Rows.Count, "A").End(xlUp)).AdvancedFilter xlFilterCopy, , wsDest.Range("A1"), True
wsData.Range("B1", wsData.Cells(Rows.Count, "B").End(xlUp)).AdvancedFilter xlFilterCopy, , wsDest.Range("B1"), True
wsDest.Range("B2", wsDest.Cells(Rows.Count, "B").End(xlUp)).Copy
wsDest.Range("B1").PasteSpecial xlPasteValues, Transpose:=True
With wsDest.Range("A1", wsDest.Cells(1, Columns.Count).End(xlToLeft))
.Font.Bold = True
.Borders(xlEdgeBottom).LineStyle = xlContinuous
With .Offset(, 1).Resize(, .Columns.Count - 1)
.Value = Application.Transpose(Evaluate("Index(""Group""&Row(1:" & .Columns.Count & "),)"))
End With
End With
ReDim arrData(1 To wsDest.Cells(Rows.Count, "A").End(xlUp).Row - 1, 1 To wsDest.Cells(1, Columns.Count).End(xlToLeft).Column - 1)
For Each NameCell In wsDest.Range("A2", wsDest.Cells(Rows.Count, "A").End(xlUp)).Cells
DataIndex = DataIndex + 1
Set rngFound = wsData.Columns("A").Find(NameCell.Text, , xlValues, xlWhole)
If Not rngFound Is Nothing Then
cIndex = 0
strFirst = rngFound.Address
Do
cIndex = cIndex + 1
arrData(DataIndex, cIndex) = wsData.Cells(rngFound.Row, "B").Text
Set rngFound = wsData.Columns("A").Find(NameCell.Text, rngFound, xlValues, xlWhole)
Loop While rngFound.Address <> strFirst
End If
Next NameCell
If DataIndex > 0 Then wsDest.Range("B2").Resize(UBound(arrData, 1), UBound(arrData, 2)).Value = arrData
Set wsData = Nothing
Set wsDest = Nothing
Set NameCell = Nothing
Set rngFound = Nothing
Erase arrData
End Sub
マクロの使用方法:
- マクロが実行されるワークブックのコピーを作成します
- コードがスムーズに実行されない場合に備えて、常にワークブックのコピーで新しいコードを実行する
- これは、何かを削除するコードに特に当てはまります。
- コピーしたブックで Alt キーを押しながら F11 キーを押して、Visual Basic Editor を開きます。
- 挿入 | モジュール 提供されたコードをコピーして、モジュールに貼り付けます
- Visual Basic エディターを閉じる
- Excel で、ALT+F8 を押して、実行可能なマクロのリストを表示します。
- 目的のマクロをダブルクリックします (これを tgr と名付けました)