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

Excel VBA中如何将数组传入SUMPRODUCT无需输出到工作表

可行实现方案

这里提供两种无需输出临时P列的实现方式:

方案1:全内存VBA计算(无任何工作表临时写入、无公式)

直接在VBA里读取所有需要的列数据,完成匹配计算后直接写入K列,完全绕开临时区域和工作表公式:

Sub SumWithoutTempColumn()
    Dim ws As Worksheet
    Dim arrA, arrB, arrD, arrF, arrI, arrK
    Dim i As Long, j As Long, total As Double
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ' 一次性读取所有需要的列数据到内存数组
    arrA = ws.Range("A2:A250").Value
    arrB = ws.Range("B2:B250").Value
    arrD = ws.Range("D2:D250").Value
    arrF = ws.Range("F2:F250").Value
    arrI = ws.Range("I2:I250").Value
    ReDim arrK(1 To 249, 1 To 1) ' 对应K2:K250共249行
    
    ' 遍历每一行I列的匹配值
    For i = 1 To UBound(arrI)
        total = 0
        ' 遍历所有行计算匹配和
        For j = 1 To UBound(arrA)
            If arrA(j, 1) & " " & arrB(j, 1) = arrI(i, 1) Then
                total = total + arrD(j, 1) * arrF(j, 1)
            End If
        Next j
        arrK(i, 1) = IIf(total = 0, "", total)
    Next i
    
    ' 一次性写入结果到K列
    ws.Range("K2:K250").Value = arrK
End Sub

这种方式效率最高,全程没有多余的工作表读写操作,也不会产生任何临时数据。

方案2:修改公式逻辑,直接拼接A/B列替代P列引用

如果你希望保留公式写法的灵活性,可以直接把P列的拼接逻辑内嵌到公式里,完全不需要用到P列:

Sub SumDataWithoutTemp()
    Const dFormula As String _
        = "=IFERROR(SUMPRODUCT(--(A$2:A$250&"" ""&B$2:B$250=I2),D$2:D$250,F$2:F$250),"""")"
    With ThisWorkbook.Worksheets("Sheet1").Range("K2:K250")
        .Formula = dFormula
        .Value = .Value
    End With
End Sub

公式直接将A列和B列拼接后参与匹配,不需要提前把拼接结果写入P列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:02