如何使用数组作为范围?

How do I use an Array as a range?

一开始可能是个愚蠢的问题,但我需要将数据存储在数组中,然后在调用范围的函数中使用该数据。

我的数组有以下代码 -

Function UnitCheckArr()
Dim UnitValueArr(2 To 250) As Long
Dim UnitValue As Long


For UnitValue = LBound(UnitValueArr) To UBound(UnitValueArr)
UnitValueArr(UnitValue) = Cells(UnitValue, 4) * Cells(UnitValue, 6)
Next UnitValue

End Function

然后我想在 SUMIF 函数中使用所述数组,就像这样 -

Sub NetSumIF()
If [COUNTA(F2:F250)=0] Then

Worksheets("Sheet1").Range("K2:K250") = Application.WorksheetFunction.SumIf(Worksheets("Sheet1").Range("I2:I250"), "I2", Worksheets("Sheet1").Range("UnitCheckArr"))

End If
End Sub

目前我遇到了一个对象定义的错误,我认为这是因为我无法将数组表示为 sumif 的范围..?我无法将原始函数表达到工作表中。有什么想法可以解决这个问题或以不同的方式解决它吗?

根据条件对产品求和

  • SumIf 适用于范围,不适用于数组。
  • Range("A1:A10") 是一个范围,而 Range("A1:A10").Value 是一个二维单列数组(包含 10 个元素(行))。
  • 您可以将产品写入另一列并使用此列应用 SumIf,或者您可以在代码中创建循环(可能太慢),等等。
  • 而是尝试以下方法之一。让我们知道它有什么问题,如果您需要它的某些部分是动态的。

Excel

  • 在单元格 K2 中,您可以使用:

    =IFERROR(SUMPRODUCT(--(I:I0=I2),D:D0,F:F0),"")
    

    然后抄下来。

VBA(公式)

Option Explicit

Sub SumData()
    Dim dFormula As String
    Const dFormula As String _
        = "=IFERROR(SUMPRODUCT(--(I:I0=I2),D:D0,F:F0),"""")"
    With ThisWorkbook.Worksheets("Sheet1").Range("K2:K250")
        .Formula = dFormula
        .Value = .Value
    End With

End Sub