有选择地合并Excel行并删除原始行

时间:2011-12-23 06:15:11

标签: excel excel-vba excel-vba-mac excel-2011 vba

我有一个Microsoft Excel电子表格(Mac 2011)。

  1. 有些行在A,C,D,E,F和G列中有数据。我会将这些行称为PARENT行。

  2. 其他行只在B列中有数据。我将其称为CHILD行。每个CHILD行实际上是它上面的PARENT行的子集。

  3. 每个PARENT行下面有1到20个CHILD行。

  4. 模式通常是:PARENT ROW,下面有几个孩子,然后是另一个家长,下面有几个孩子,然后是另一个家长等等。

  5. 我想:

    [a]复制每个PARENT行的内容并将它们添加到它下面的CHILD行。

    [b]复制后,删除原始的PARENT行。

    电子表格中有超过40,000行,我不知道如何创建宏。

1 个答案:

答案 0 :(得分:0)

你实际上并不需要一个宏(但我在底部提供了一个)

[请注意,这是适用于Windows的Excel工作解决方案 - 我没有使用Excel for Macs的经验,因此无法保证下面的解决方案中的任何一个或两个都适合您]

手动解决方案

  1. 选择列A,C,D和E(确保先选择A列)
  2. 按F5 ....转到特殊并选择空白,然后点击“确定”
  3. 在公式栏中,键入= A1,其中A1是正上方第一个空白单元格中的单元格(见下图,此单元格为A1)
  4. 同时按 Ctrl Enter 键。您现在在子行中拥有正确的数据
  5. 选择列A:E和复制,然后选择“将特殊值粘贴为值”,将刚刚在子行中输入的公式转换为值
  6. 选择B列
  7. 按F5 ....转到特殊并选择空白然后点击“确定”(见下图)
  8. 删除选中的行
  9. Step 3 Step 7

    代码解决方案

    Sub Delete()
    Dim rng1 As Range
    Dim rng2 As Range
    On Error Resume Next
    Set rng1 = Range("A:A,C:E").SpecialCells(xlBlanks)
    On Error GoTo 0
    If rng1 Is Nothing Then Exit Sub
    rng1.Formula = "=R[-1]C"
    'handles two row areas else SpecialCells will force both areas to area1 formulae
    For Each rng2 In rng1.Areas
    rng2.Value = rng2.Value
    Next rng2
    On Error Resume Next
    Set rng1 = Range("B:B").SpecialCells(xlBlanks)
    On Error GoTo 0
    If Not rng1 Is Nothing Then rng1.EntireRow.Delete
    End Sub