Excel VBA 排除指定列后对两行数据求和的实现方法咨询

解决方案
你现有代码用xlPasteAll加xlAdd的逻辑会全列执行相加操作,所以会把Charge列也纳入求和范围,只需要在原有逻辑基础上单独屏蔽Charge列的求和即可,对你的代码改动最小的方案是相加后还原Charge列的原值,修改后的代码如下:
Dim chargeCol As Integer ' 请将下面的Rows(1)修改为你实际表头所在的行号 chargeCol = Rows(1).Find(What:="Charge", LookIn:=xlValues, LookAt:=xlWhole).Column Range("e5").Select Do If ActiveCell.Value <> ActiveCell.Offset(1, 0).Value Then ActiveCell.Offset(1, 0).Select Else ActiveCell.Offset(0, 3).Select If ActiveCell.Value <> ActiveCell.Offset(1, 0).Value Then ActiveCell.Offset(1, -3).Select Else Dim tempChargeVal, mergeRow As Long mergeRow = ActiveCell.Row ' 提前保存下一行Charge列的原始值,避免被相加覆盖 tempChargeVal = Cells(mergeRow + 1, chargeCol).Value Rows(mergeRow).Select Selection.Copy ActiveCell.Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ' 还原Charge列的原始值,不参与求和 Cells(mergeRow + 1, chargeCol).Value = tempChargeVal ActiveCell.Offset(-1, 0).Select Rows(ActiveCell.Row).Select Selection.Delete ActiveCell.Offset(0, 4).Select End If End If Loop Until ActiveCell.Value = ""
逻辑说明
- 首先自动定位Charge列的列号,不需要手动适配表格列的位置
- 行相加操作执行前先保存目标行Charge列的原始值
- 全列相加完成后单独把Charge列的值还原为保存的原始值,就能实现该列不参与求和的需求
- 完全保留了你原有代码的匹配、合并、删除逻辑,不需要调整原有业务逻辑的判断规则
内容的提问来源于stack exchange,提问作者Kamil Kostrubiec
相关产品推荐
相关产品推荐

