Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBA对Excel中的类似行求和/合并?_Vba_Excel_Merge_Rows - Fatal编程技术网

如何使用VBA对Excel中的类似行求和/合并?

如何使用VBA对Excel中的类似行求和/合并?,vba,excel,merge,rows,Vba,Excel,Merge,Rows,我正在尝试在VBA for Excel中构建一个简单的宏,该宏将对第一列中具有相同名称值的所有行进行求和[合并]。 比如说 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 我们可以假设需要合并的行不是分散的,只能一个接一个地出现 我做了类似的事情,它几乎可以工作,除了我必须运行它两次

我正在尝试在VBA for Excel中构建一个简单的宏,该宏将对第一列中具有相同名称值的所有行进行求和[合并]。 比如说

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圣经。

试试这样的东西:

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

此代码更易于阅读,并执行以下操作:

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

'如果必须运行宏两次,idk将 1: 在宏的顶部和底部放置 转到1 “那会让你跑两次
'或者您可以在不同的宏中调用它两次。取决于您

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

首先,可以打开包含重复值的表的图纸。 遵循以下步骤:

将Excel光标放在需要合并数据的位置。然后,转到数据选项卡>合并。 “合并”对话框将出现。 在此处输入具有重复值的表,然后单击“添加”添加这些值。 然后,选择具有重复值的行/列。在这张图中,它位于左列。 只需单击“确定”,即可完成。
谢谢这完美地解决了迭代问题。但如果有更固体的溶液,我仍然愿意。溶液需要是宏观的吗?您是否考虑过改用Excel的内置电子表格功能?例如,如果第一列的可能值提前已知,则可以使用SUMIF工作表函数轻松完成此操作。如果第一列的可能值事先未知,则可以使用透视表。这不会生成无限循环吗?如果要合并的行彼此不相邻,有什么方法可以这样做吗?