Excel VBA实现G列最新4条数据求和写入对应H列的问题求助
问题排查点
- 第一处逻辑错误:
wks.Range("G2").End(xlDown)无法正确定位G列最后一行,若G列存在空单元格会直接停在空单元格上方,且当G列有效数据不足4行时,Offset(-3,0)会直接触发下标越界错误。 - 第二处写入位置错误:原代码的求和结果写入逻辑是找H列最下方非空单元格向下偏移1行再偏移3行,完全没有匹配到最新4条数据的最后一行右侧单元格,不符合需求要求。
- 第三处分组逻辑缺失:没有做数据行数校验,未判断当前录入的数据是否刚好凑满4的倍数条,会出现不满4条也强制求和的异常情况。
修正后代码
Private Sub CommandButton3_Click() Dim wks As Worksheet Dim lastRowG As Long Dim sumVal As Double Set wks = Sheet2 ' 可根据实际使用的工作表调整 ' 正确定位G列最后一行非空单元格行号,不受列内空单元格影响 lastRowG = wks.Cells(wks.Rows.Count, "G").End(xlUp).Row ' 校验数据量:假设G1是表头,从G2开始录入数据,总有效数据量为lastRowG-1,需满足凑满4条一组 If lastRowG < 2 Or (lastRowG - 1) Mod 4 <> 0 Then MsgBox "当前有效数据不足4条或未凑满4条一组,暂不执行求和" Exit Sub End If ' 对最新一组的4条数据求和 sumVal = Application.WorksheetFunction.Sum(wks.Range(wks.Cells(lastRowG - 3, "G"), wks.Cells(lastRowG, "G"))) ' 结果直接写入当前组最后一条数据右侧的H列单元格 wks.Cells(lastRowG, "H").Value = sumVal End Sub
内容的提问来源于stack exchange,提问作者Shane Cahalane
相关产品推荐
相关产品推荐

