Excel:按类别将行划分为列

时间:2018-10-23 07:15:18

标签: excel categories transpose

我有一个像这样的Excel工作表:

Category    Value
X           1
X           2
X           3
X           4
Y           1
Z           1
Z           2

我想将其转换为类别,并将值行转换为列。像这样:

Category    Value1    Value2    Value3   Value4
X           1         2         3        4
Y           1         
Z           1         2

伙计们,您知道怎么做吗?我真的很坚持。 非常感谢。

3 个答案:

答案 0 :(得分:0)

如果我没有记错的话,您可以简单地使用数据透视表:

这会让您从中摆脱出来:

enter image description here

对此:

enter image description here

您只需要将两列放在以下的行列和值中即可:

enter image description here

之后,您只需更改列名

答案 1 :(得分:0)

将数据从下到上依次排列,然后进行重组。

Option Explicit

Sub expandValues()

    Dim i As Long, mx As Long, arr As Variant, tmp As Variant

    With Worksheets("sheet7")

        'determine no of values and create new headers
        For i = 1 To Application.Max(.Columns("B"))
            .Cells(1, i + 1) = "value" & i
        Next i

        'transfer values
        For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 3 Step -1
            If .Cells(i, "A").Value2 = .Cells(i - 1, "A").Value2 Then
                With .Range(.Cells(i, "B"), .Cells(i, .Columns.Count).End(xlToLeft))
                    .Parent.Cells(i - 1, 3).Resize(1, .Columns.Count) = .Value2
                End With
                .Cells(i, "A").EntireRow.Delete
            End If
        Next i

    End With

End Sub

答案 2 :(得分:0)

这是公式方法,

enter image description here

首先在单元格C2中编写此数组公式,然后按Ctrl + Shift + Enter从A列中查找唯一值(即X,Y,Z)并将其向下拖动。

  

= IFERROR(INDEX($ A $ 2:$ A $ 8,MATCH(0,COUNTIF($ C $ 1:C1,$ A $ 2:$ A $ 8),0)),“”)

现在填充您的列标题中的value1,value2等。

最后在单元格D2中写入此公式并将其向右和向下拖动。

  

= IF(COUNTIFS($ A $ 2:$ A $ 8,$ C2,$ B $ 2:$ B $ 8,RIGHT(D $ 1,1))> 0,RIGHT(D $ 1,1)* 1,“” )