Excel VBA二维数组指定列求和问题:现有代码故障求助
修复二维数组指定列求和的VBA代码
看起来你的代码逻辑方向是对的,但目前的片段没写完,还存在效率和逻辑上的小问题——没必要每一行都遍历所有列来找目标列。咱们可以先定位到"Net Amount Local"对应的列索引,再专门对这一列的所有行求和,这样更高效也更清晰。
下面是修复并完善后的代码:
Sub Evaluate_PositionV() Dim aMapRow As Integer, targetCol As Integer Dim Ttraded As Double Dim colFound As Boolean Ttraded = 0 colFound = False ' 第一步:先找到"Net Amount Local"所在的列索引 For targetCol = LBound(arrayTraded, 2) To UBound(arrayTraded, 2) ' 假设数组的第一行是表头(如果表头在其他行,这里要调整行索引) If arrayTraded(LBound(arrayTraded, 1), targetCol) = "Net Amount Local" Then colFound = True Exit For ' 找到目标列后退出列循环,不用再找了 End If Next targetCol ' 检查是否找到目标列,避免报错 If Not colFound Then MsgBox "未找到列:Net Amount Local" Exit Sub End If ' 第二步:遍历所有行,对目标列求和 For aMapRow = LBound(arrayTraded, 1) + 1 To UBound(arrayTraded, 1) ' 跳过表头行(如果表头在第一行的话,否则去掉+1) If IsNumeric(arrayTraded(aMapRow, targetCol)) Then Ttraded = Ttraded + CDbl(arrayTraded(aMapRow, targetCol)) End If Next aMapRow ' 输出结果,这里用Debug.Print或者你需要的方式 Debug.Print "Net Amount Local列总和:" & Ttraded End Sub
关键改进点:
- 先定位目标列:只遍历一次列找到目标列索引,避免每行都重复遍历列,大幅提升效率
- 增加列存在检查:防止因为找不到目标列导致后续代码抛出错误
- 跳过表头行:默认数组第一行是表头,如果你的表头位置不同,调整
LBound(arrayTraded, 1) + 1的部分即可 - 数值校验:用
IsNumeric检查单元格内容是否为数值,避免非数值内容干扰求和结果
如果你的数组表头不在第一行,或者arrayTraded的结构有特殊情况,随时告诉我调整细节~
内容的提问来源于stack exchange,提问作者phillipsK
相关产品推荐
相关产品推荐

