如何使用VBA在Excel中合并/合并类似的行?

时间:2011-06-20 10:18:19

标签: excel vba excel-vba merge rows

我正在尝试在VBA for Excel中构建一个简单的宏,它将SUM [合并]所有具有相同名称的行(第一列中的值)。 例如,

ExampleRowA 1 0 1 1 3 4
ExampleRowA 2 1 2 2 1 0
ExampleRowC 9 7 7 7 2 5

结果应如下所示

ExampleRowA 3 1 3 3 4 4
ExampleRowC 9 7 7 7 2 5

我们可以假设需要合并的行没有分散,只能一个接一个地出现。

我做了类似的事情,它几乎可以工作,除了我必须运行两次。

LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction


     For iRow = 2 To LastRow
        If Cells(iRow, 1) = Cells(iRow + 1, 1) Then
            LastCol = r(r.Count).Column
            SumCol = LastCol + 1
                For iCol = 2 To SumCol
                Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
                Next iCol
            Rows(iRow + 1).Delete
        End If
     Next iRow

End With

我已经用其他脚本语言做了一些编程,但我不熟悉VB / VBA,也不知道它的可能性/局限性。

在其他语言中,我可能会使用数组,但我不知道他们在这里工作的方式。我不能否认,由于时间的限制,我更愿意通过分析实例来学习,而不是阅读500多页的VBA圣经。

4 个答案:

答案 0 :(得分:3)

尝试这样的事情:

LastRow = ActiveSheet.UsedRange.Rows.Count
Set r = ActiveSheet.UsedRange.Resize(1)
With Application.WorksheetFunction

    For iRow = LastRow-1 to 2 step -1
        do while Cells(iRow, 1) = Cells(iRow + 1, 1) 
            LastCol = r(r.Count).Column
            SumCol = LastCol + 1
               For iCol = 2 To SumCol
               Cells(iRow, iCol) = .Sum(Range(Cells(iRow, iCol), Cells(iRow + 1, iCol)))
               Next iCol
            Rows(iRow + 1).Delete
        loop
    Next iRow

End With

答案 1 :(得分:2)

此代码更易于阅读并完成工作:

Sub Macro1()
    Dim ColumnsCount As Integer

    ColumnsCount = ActiveSheet.UsedRange.Columns.Count

    ActiveSheet.UsedRange.Activate


    Do While ActiveCell.Row <= ActiveSheet.UsedRange.Rows.Count
        If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
            For i = 1 To ColumnsCount - 1
                ActiveCell.Offset(0, i).Value = ActiveCell.Offset(0, i).Value + ActiveCell.Offset(1, i).Value
            Next
            ActiveCell.Offset(1, 0).EntireRow.Delete shift:=xlShiftUp
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop


End Sub

答案 2 :(得分:0)

'如果你必须运行两次宏,idk放一个 1: on top of your macro and on the bottom put goto 1 '那将为你运行两次 '或者你可以在另一个宏中调用它两次。由你决定

答案 3 :(得分:0)

对于您的问题,您不需要宏或任何VBA代码。

您可以从包含重复值的表打开工作表开始。 按照步骤:

  1. 将Excel光标放在要放置合并数据的位置。然后,转到数据选项卡&gt;巩固。 enter image description here
  2. 将显示“合并对话框”。
  3. 此处输入具有重复值的表,然后单击添加以添加这些值。
  4. 然后,选择具有重复值的行/列。在这个左栏中。 enter image description here
  5. 只需点击“确定”即可完成。 enter image description here