Excel 使用VBA透视数据

Excel 使用VBA透视数据,excel,vba,Excel,Vba,我有以下格式的数据 Col1 Col2 Col3 Col4 ServerA 1002 CPU 1 ServerA 1003 Cores 4 ServerA 1005 Memory 16 我需要数据显示为 Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 ServerA 1002 CPU 1003 Cores

我有以下格式的数据

Col1     Col2    Col3    Col4
ServerA  1002    CPU     1
ServerA  1003    Cores   4
ServerA  1005    Memory  16
我需要数据显示为

Col1     Col2     Col3     Col4     Col5     Col6    Col7   Col8     Col9
ServerA  1002     CPU      1003     Cores    4       1005   Memory   16
有没有办法使用Excel VBA实现这一点?

您可以尝试以下方法:
不是很干净,但我认为它应该符合你的目的

Option Explicit

Sub Sample()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim RngToUnstack As Range, cel As Range, cel1 As Range
Dim i As Long

Set ws1 = ThisWorkbook.Sheets("Sheet2")
Set ws2 = ThisWorkbook.Sheets("Sheet3")

Set RngToUnstack = ws1.UsedRange
'~~> just an alternative to .UsedRange
'Set RngToUnstack = ws1.Range("A1", "D" & ws1.Range("A" & _
    ws1.Rows.Count).End(xlUp).Row)

'~~> construct your unique ID's in Worksheet 2
With ws2
    RngToUnstack.Resize(, 1).Copy .Range("A1")
    .Range("A1", .Range("A" & .Rows.Count).End(xlUp).Address).RemoveDuplicates 1, xlNo
End With
'~~> loop to populate the ID's
For Each cel1 In ws2.Range("A1", ws2.Range("A" & ws2.Rows.Count).End(xlUp).Address)
    i = 0
    For Each cel In RngToUnstack.Resize(, 1)
        If cel.Value = cel1.Value Then
            cel.Resize(, 3).Offset(0, 1).Copy cel1.Offset(0, (3 * i) + 1)
            i = i + 1
        End If
    Next cel
Next cel1
End Sub
结果:

假设您的示例数据如下所示:

运行宏后,宏将变成这样:

就是这样吗?“1、4和记忆会发生什么变化?”蒂姆·威廉姆斯-道歉。我已经更新了帖子。所有字段都需要显示。并且服务器A的计数不同?我的意思是不总是3对吗?例如,可以有4个
ServerA
然后是5个
ServerB
?@L42-这是正确的。那么您的问题
的答案是,有没有一种使用Excel VBA实现这一点的方法?
是:)