【问题标题】:Passing data into SUMPRODUCT将数据传递到 SUMPRODUCT
【发布时间】:2021-12-17 18:13:39
【问题描述】:

我之前用过下面的代码-


Dim HSArr(2 To 250) As Variant
Dim HSVal As Long

For HSVal = LBound(HSArr) To UBound(HSArr)
HSArr(HSVal) = Cells(HSVal, 1) & " " & Cells(HSVal, 2)
Next HSVal

这是一个将A列和B列连接起来的数组,然后该数组将输出到“P2:P250”的工作表中。

Sub SumData()
    Const dFormula As String _
        = "=IFERROR(SUMPRODUCT(--(P$2:P$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

这段代码在一定程度上做了我想做的事,但需要“P2:P250”来包含数组输出,但我不想在工作表上输出任何东西。

这里有一条我不明白的信息,我如何将数组中的这些值引入 SUMPRODUCT(而不是“P2:P250”),即使它不是通过数组方法,因为我可以如果它不在工作表本身上,就不要将其用作范围。有什么想法吗?

【问题讨论】:

  • 如果您在第一批代码中构建数组。看看把你需要的信息放在字典里,在那里你有来自Cells(HSVal, 1) & " " & Cells(HSVal, 2) 的信息作为键,然后是项目中需要的信息。然后 SumData 将按原样冗余,并且可以用函数替换,例如 GetFromCol(strKey as string) 或传递返回值的 excel 范围。您还可以在数组源中使用辅助列,然后在公式中使用它,这样 P$2:P$250 将是数组数据来自的辅助列。

标签: arrays excel vba range sumproduct


【解决方案1】:

使用 VBA 构建一个数组,然后尝试将其与工作表中的公式一起使用,而不将该信息放入工作表中通常是行不通的,但是在这里您可以改用公式中的源数据:

=IFERROR(SUMPRODUCT(--(A$2:A$250&" "&B$2:B$250=I2),D$2:D$250,F$2:F$250),"""")

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2019-11-18
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多