如何让VBA在列中自动查找多个值块并模拟autosum函数?

我试图想出代码,检查2行或更多行的值组中的值,然后在每个组中的列“O”中的单元格中的值。 目前,有两个或两个以上非空行的组与下一个非空行分开两个空行。 我使用下面的代码取得了一些成功:

Sub AutoSum() Application.ScreenUpdating = False Dim LastRow As Integer Dim FirstRowWithValue As Integer 'Search code LastRow = ActiveSheet.Cells(Rows.Count, "H").End(xlUp).Row Dim i As Long 'Begin loop code For i = LastRow + 1 To 3 Step -1 If IsEmpty(Range("I" & i)) And Range("I" & i) <> Range("I" & i).Offset(-1) Then If Range("I" & i).Offset(-1) = Range("I" & i).Offset(-2) Then Dim cell1 As String Dim cell2 As String cell1 = Range("O" & i).Offset(-1).End(xlUp).Address cell2 = Range("O" & i).Offset(-1).Address Range("O" & i).Value = "=sum(" & (cell1) & ":" & (cell2) & ")" i = FirstRowWithValue + 1 End If End If Next i Columns("O").AutoFit Application.ScreenUpdating = True 'End loop code Application.ScreenUpdating = True 'End loop code End Sub 

您会注意到正在检查“I”列。 这是因为在每个行组中,列“I”中的值将是相同的。 这是这个代码用于确定合适的行的适当范围的标准。

问题是,如果有多个包含2个或更多行的值的组,则此代码不起作用。 它从底部开始检查,find一个,在IF-THEN语句中执行代码,然后对第一个以上的任何组执行任何操作。 我该如何解决?

我用你的代码看到一个可能的问题是你的FirstRowWithValuevariables没有被初始化为任何值。 由于你没有设置任何值,它会自动设置为0,并将我设置为1,结束你的循环和你的macros。 您需要自行设置该值,或者删除该行代码。

 'Sets i to 1, set FirstRowWithValue or Delete this line i = FirstRowWithValue + 1