如何在VBA中对多维数组指定列的所有行求和(无需循环)
VBA数组指定列求和问题
我有一个维度可变的数组,第11列是需要汇总的金额数据,示例如下:
MyArray(1,11) = 2000 + MyArray(2,11) = 1000 + MyArray(3,11) = 3000 = 6000
想请教有没有不用遍历数组,就能对指定列的所有行求和的方法?我试了下面这段代码但没成功:
With Application.WorksheetFunction OppAmount = .Sum(.Index(CurDealArr, DealsTable.ListColumns("AMOUNT").Index)) End With
问题分析与解决方案
你的代码出错是因为WorksheetFunction.Index处理二维数组时参数顺序错误——要提取整列,需将行参数设为0(或省略),同时把列参数放在第二个位置。
正确写法1:WorksheetFunction.Index + Sum
调整Index参数,明确指定提取目标整列:
With Application.WorksheetFunction ' 行参数设为0表示提取整列,第二个参数为目标列的索引 OppAmount = .Sum(.Index(CurDealArr, 0, DealsTable.ListColumns("AMOUNT").Index)) End With
正确写法2:直接用Application.Sum配合数组切片
VBA中Application.Sum支持直接对数组指定列求和,写法更简洁:
OppAmount = Application.Sum(Application.Index(CurDealArr, 0, DealsTable.ListColumns("AMOUNT").Index))
注意事项
- 确保你的数组是二维数组(即使只有一行/一列,也要保持二维结构),一维数组需先转换维度才能用此方法。
- 数组中若存在空值,
Sum会自动忽略;但如果有非数值类型数据,会触发错误,需提前处理数据类型。
内容的提问来源于stack exchange,提问作者CostcoGridlock
相关产品推荐
相关产品推荐

