根据行值将两列表格转换为多列

根据行值将两列表格转换为多列

我有一张包含两列的表格,其行如下:

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 上显示的样子如下

在此处输入图片描述

这可能存在一些缺陷(取决于有多少行),但根据您给出的示例,它效果很好。

相关内容