以下 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 列,这样您就会得到所需的布局。