У меня есть таблица из 2 столбцов с такими строками:

1 Brand1
1 Brand2
2 Brand3
2 Brand4
2 Brand2
2 Brand5
3 Brand5
3 Brand2
4 Brand3

Я хотел бы превратить каждое значение из 1-го столбца в заголовок столбца, а ниже список значений из 2-го столбца:

1        2        3        4
Brand1   Brand3   ...      ...
Brand2   Brand4   ...
         Brand2
         Brand5

Я не могу сделать это через сводную таблицу, так как она должна иметь числовое значение для вычисления (сумма, число, ...), и я не нашел никакой помощи, так как на самом деле это довольно сложно объяснить и посмотреть решение в гугле (выбор правильных терминов).

Я знаю, что есть решения (в VBA), чтобы сделать обратное, но мне не удалось найти решение моей проблемы.

Я видел некоторые конкретные термины, такие как "сложить" или "раскрыть", но я не уверен, какой из них правильный, и подходит ли он здесь.

1 ответ1

0

Обратите внимание, что вам придется обновить приведенный ниже код в зависимости от количества используемых строк. в приведенном ниже примере я использовал 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

Это мой лист1

И вот как это выглядит на Sheet2

Это может иметь некоторые недостатки (в зависимости от того, сколько строк у вас есть), но, основываясь на приведенном вами примере, это прекрасно работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .