Excel:在数据布局之间转换


1

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

我有:

组ID
4

姓名电子邮件喜欢不喜欢
herpina something蛋糕Excel
derpina一些蛋糕Excel

组ID
五

姓名电子邮件喜欢不喜欢
roflmao什么蛋糕嗯
roflomg烘焙测试
testtttt什么睡觉22

组ID
1

姓名电子邮件喜欢不喜欢
OAG是OAB N / A.
OAB是N / AN / A.

期望:

姓名电子邮件喜欢不喜欢GroupID
herpina something蛋糕Excel 4
derpina的东西Cake Excel 4
roflmao什么蛋糕嗯5
roflomg烘焙测试5
testtttt什么睡觉22 5
OAG OAB N / A 1
OAB是N / AN / A 1

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

Answers:


2

这是宏尽可能短

  • 打开Excel并按ALT+F11
  • 将下面的代码插入到sheet1或您的数据所在的位置
  • 关闭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行:是检查当前单元格值是“Name”,“GroupID”,空白还是数字的条件。
  • 第8行:如果条件为真,则删除整行
  • 第9行:如果条件为真,则计算我们的howmanydeletedlines计数器
  • 第10-12行:如果条件为假,则必须是我们想要保留的良好数据行
  • 第13行:循环到下一个i,代表我们当前的行

这是一个开始,但并不完全存在。请查看dl.dropbox.com/u/736090/Book1.xlsx上的示例输入- 如果您需要其他格式,请告诉我。
Christian Neverdal 2013年

我编辑了我的答案。我用你的book1.xlsx对它进行了测试,它对我有用。
nixda 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.