【发布时间】: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