将水平表格布局转换为垂直表格

将水平表格布局转换为垂直表格

以下 Excel 表必须重新排列

ID  Name1  Name2  Name3

1   Alf    Bert   Fritz

2   Curt

3   Otto   Mike

4   Sue    Zack 

ID  Name

1   Alf

1   Bert

1   Fritz

2   Curt

3   Otto

3   Mike

4   Sue

4   Zack

我缺少正确的搜索词,猜测它相当常见,但我无法正确描述它。

答案1

试试这个代码。它一步一步来,不言自明。您的输入数据从 A1 开始,输出从 A8 开始。这可以更改。

当然可以使用更短的代码,而且我猜也可以将数组公式放在一起。

Sub single_col()
    Dim icell As Integer
    Dim irow As Integer, icol As Integer
    Dim nrows As Integer, ncols As Integer
    Dim rng_all As Range, rng_curr As Range, rng_trg As Range
    Set rng_all = Range("A2:D5")
    Set rng_trg = Range("A8")
    nrows = rng_all.Rows.Count
    icell = 0
    For irow = 1 To nrows
      Set rng_curr = rng_all.Rows(irow)
      ncols = WorksheetFunction.CountA(rng_curr)
      For icol = 2 To ncols
        icell = icell + 1
        Dim name As String
        name = rng_curr.Cells(1, icol).Text
        rng_trg.Value = rng_curr.Cells(1, 1).Text
        rng_trg.Offset(0, 1).Value = name
        Set rng_trg = rng_trg.Offset(1, 0)
      Next icol
    Next irow
End Sub

PS:上面的代码已经包含注释中建议的修改。

答案2

您有一个要“取消透视”的透视表布局。这文章Jon Walkenbach 展示了只需几次击键即可完成的操作,无需任何 VBA 代码。

针对您的具体情况,我会这样做。

1.使用 Alt + D、P 打开“旧”数据透视表菜单。您将看到如下所示的对话框。选择“多个合并范围”选项,然后单击“下一步”。

在此处输入图片描述

2.下一步选择“我将创建页面字段”;单击“下一步”。

在此处输入图片描述

3.突出显示单元格范围,使其在对话框的上部定义,然后单击“添加”按钮将该范围复制到“所有范围”列表中。单击“下一步”。

在此处输入图片描述

4.选择远离数据的单元格。在这里你可以看到我选择了同一张表上的 F3。(如果你愿意,你可以选择不同的表。)单击“完成”。

在此处输入图片描述

5.您将得到如下数据透视表。在对话框中,取消选中“行”和“列”复选框。

在此处输入图片描述

6.这样您将得到一个单元格的数据透视表。

在此处输入图片描述

7.然后双击一个单元格,在新工作表上,您将获得“未透视”数据作为新表:

在此处输入图片描述

有了此表格数据,您现在可以过滤 C 列以显示非空白,并且可以删除 B 列,这样您就会得到所需的布局。

相关内容