Excel:数据布局之间的转换

Excel:数据布局之间的转换

我的情况如下。有几组行。每组上方都有一个小“标题”,描述该组内所有行共有的数据字段。我想创建一个包含所有内容的数据透视表并包含该字段(GroupID),因此我想要该表的第二个版本。有没有办法不录制宏就做到这一点?或者有没有办法直接创建数据透视表?

我有:

群组编号
4

姓名 电子邮件 喜欢 不喜欢
herpina 某物蛋糕 Excel
derpina 某物 Cake Excel

群组编号
5

姓名 电子邮件 喜欢 不喜欢
大笑某事蛋糕嗯
roflomg 某事 烘焙测试
testtttt 某事 睡眠 22

群组编号
1

姓名 电子邮件 喜欢 不喜欢
OAG 某事 OAB 不适用
OAB 某事 N/A/A

期望:

姓名 电子邮件 喜欢 不喜欢 GroupID
herpina 某物蛋糕 Excel 4
derpina 某物 Cake Excel 4
大笑某事蛋糕嗯 5
roflomg 某事烘焙测试 5
testtttt 某事 睡眠 22 5
OAG 某事 OAB N/A 1
OAB 某事 N/AN/A 1

此示例输入也位于https://dl.dropbox.com/u/736090/Book1.xlsx

答案1

这是尽可能短的宏

  • 打开 Excel 并按ALT+F11
  • 将下面的代码插入到工作表1或者你的数据在哪里
  • 关闭 VBA 编辑器并按ALT+F8并执行宏

    Sub deletelines()    
      Range("A4:D4").Copy
      Range("A1").Insert Shift:=xlToRight
      For i = 2 To Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = Cells(i - counter, 1)
        if IsNumeric(c) And c <> "" Then groupID = c
        If c = "" Or c = "Name" Or c = "GroupID" Or IsNumeric(c) Then
          Rows(i - counter).Delete
          counter = counter + 1
        Else
          Cells(i - counter, 5) = groupID
        End If
      Next i   
    End Sub
    

由于这是一个问答网站,我描述了代码。这样,其他人就可以轻松调整和自定义代码,这可能会有所帮助。

  • 1+14 行:开始和结束宏(子程序)
  • 第 2+3 行:复制范围 [A4:D4] 并将其插入到 [A1] 之前。这构成了标题行
  • Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row确定最后使用的单元格。在您的示例中,其为 22
  • 第 4 行:是一个从 2 开始到 22 结束的循环。i用作行索引
  • 第 5 行:保存当前行的第一个单元格。一般语法是cells(rownumber,columnnumber)
    注意:由于我们删除了行,因此我们必须减去已经删除的行数。
  • 第 6 行:查看是否c为数字,并将其保存为我们当前的 groupID,直到找到另一个数字
  • 第 7 行:是检查当前单元格值是否为“名称”、“GroupID”、空白或数字的条件。
  • 第 8 行:如果条件为真,则删除整行
  • 第 9 行:如果条件为真,则计算我们的删除了多少行柜台
  • 第 10-12 行:如果条件为假,那么这必须是我们想要保留的良好数据行
  • 第 13 行:循环到下一行i,代表当前行

相关内容