我有一张包含两列的表格,其行如下:
1 Brand1
1 Brand2
2 Brand3
2 Brand4
2 Brand2
2 Brand5
3 Brand5
3 Brand2
4 Brand3
我想将第一列中的每个值变成列标题,下面列出第二列的值:
1 2 3 4
Brand1 Brand3 ... ...
Brand2 Brand4 ...
Brand2
Brand5
我无法通过数据透视表来做到这一点,因为它必须有一个要计算的数值(总和、计数等),而且我没有找到任何帮助,因为实际上很难解释并在谷歌中寻找解决方案(选择正确的术语)。
我知道有解决方案(在 VBA 中)可以做相反的事情,但却无法找到解决我的问题的方法。
我看到过一些特定的术语,例如“折叠”或“展开”,但我不确定哪一个是正确的,也不确定它是否适合这里。
答案1
请注意,您必须根据您使用的行数更新下面的代码。在下面的例子中,我使用了 10。
Sub Button1_Click()
Dim numberOfRows As Integer
numberOfRows = 10 ' UPDATE THIS FOR YOUR NUMBER OF ROWS
Dim i As Integer
i = 1
Dim previousValue As String
Dim currentColumn As Integer
currentColumn = 97
For rowNumber = 1 To numberOfRows
Dim currentValueOfA As String
Dim currentValueOfB As String
currentValueOfA = Worksheets("Sheet1").Range("A" & rowNumber).Value
currentValueOfB = Worksheets("Sheet1").Range("B" & rowNumber).Value
If (previousValue = "") Then
previousValue = currentValueOfA
End If
If (previousValue = currentValueOfA) Then
If (Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = "") Then
Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = currentValueOfA
End If
Worksheets("Sheet2").Range(Chr$(currentColumn) & i + 1).Value = currentValueOfB
Else
currentColumn = currentColumn + 1
previousValue = currentValueOfA
i = 1
If (Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = "") Then
Worksheets("Sheet2").Range(Chr$(currentColumn) & "1").Value = currentValueOfA
End If
Worksheets("Sheet2").Range(Chr$(currentColumn) & i + 1).Value = currentValueOfB
End If
i = i + 1
Next
End Sub
这是我的 Sheet1
在 Sheet2 上显示的样子如下
这可能存在一些缺陷(取决于有多少行),但根据您给出的示例,它效果很好。