You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中如何用数组替代SUMIF函数里的单元格区域?

调整后的VBA数组版SUMIF实现

核心思路

原代码依赖单元格区域作为SUMIF的数据源,现在改用数组替代后,核心是先将条件、求和数据存入数组,再通过循环或工作表函数完成匹配求和,最后一次性写入结果(避免循环操作单元格,提升效率)。

方案1:手动实现SUMIF逻辑(无依赖,更灵活)

适用于需要自定义匹配规则,或不想依赖工作表函数的场景:

Dim lngth As Long
Dim arrLookup As Variant
Dim arrCriteria As Variant
Dim arrSum As Variant
Dim arrResult As Variant
Dim i As Long, j As Long

' 获取当前表待匹配的条件列(原I列,第9列)
lngth = Cells(Rows.Count, 9).End(xlUp).Row
arrLookup = Range("I2:I" & lngth).Value

' --- 替换为你的实际数组来源 ---
' 示例:若原数据从其他渠道获取,直接赋值arrCriteria和arrSum即可
arrCriteria = Sheet2.Range("A2:A1000").Value
arrSum = Sheet2.Range("H2:H1000").Value

' 初始化结果数组(与待匹配条件数组同尺寸)
ReDim arrResult(1 To UBound(arrLookup, 1), 1 To 1)

' 遍历匹配并累加求和
For i = 1 To UBound(arrLookup, 1)
    For j = 1 To UBound(arrCriteria, 1)
        If arrCriteria(j, 1) = arrLookup(i, 1) Then
            arrResult(i, 1) = arrResult(i, 1) + arrSum(j, 1)
        End If
    Next j
Next i

' 一次性写入结果到L列
Range("L2:L" & lngth).Value = arrResult

方案2:用工作表函数直接处理数组

如果习惯用SUMIF逻辑,可直接传入数组参数:

Dim lngth As Long
Dim arrLookup As Variant
Dim arrCriteria As Variant
Dim arrSum As Variant
Dim arrResult As Variant
Dim i As Long

lngth = Cells(Rows.Count, 9).End(xlUp).Row
arrLookup = Range("I2:I" & lngth).Value

' --- 替换为你的实际数组来源 ---
arrCriteria = Sheet2.Range("A2:A1000").Value
arrSum = Sheet2.Range("H2:H1000").Value

' 初始化结果数组
ReDim arrResult(1 To UBound(arrLookup, 1), 1 To 1)

' 遍历每个条件,调用SUMIF计算
For i = 1 To UBound(arrLookup, 1)
    arrResult(i, 1) = Application.WorksheetFunction.SumIf(arrCriteria, arrLookup(i, 1), arrSum)
Next i

' 写入结果
Range("L2:L" & lngth).Value = arrResult

注意事项

  • 数组维度:VBA中从单元格读取的数组为二维数组(即使是单列),访问格式为数组名(行号, 列号);若为自定义一维数组,需调整循环逻辑。
  • 效率优化:两种方案均采用“数组读数据→内存计算→一次性写结果”的模式,远优于原代码循环写入整列的操作。

内容的提问来源于stack exchange,提问作者Drawleeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:05:29