簡體   English   中英

來自Excel VBA中的數組的求和

[英]Sumifs from an Array in Excel VBA

我想從一個數組中求和,但是我不確定如何引用數組中的完整列。 例如,我在excel中有以下數據(在A和B列中),並且代碼運行正常,

RR TT 1 J 2 K 3 J 4 K 5 J 5 K 6 J 7 K 8 J 9 K

 Sub test() 
 Dim s As Range 
 Dim s2 As Range
 Set s = Range("A2:A11") 
 Set s2 = Range("B2:B11")
 e = WorksheetFunction.SumIfs(s, s2, "J")
 MsgBox e 
 End Sub

這將RR列加起來,其中TT列等於“ J”,答案是23。但是在代碼中,我將每一列分配給VBA中的單獨Range。 我想將兩列都分配給一個數組,並從該數組中進行求和。 然后,代碼的第一部分如下所示:

Dim s() As Variant
ReDim s(1 To 10, 1 To 2)
s = Range("A2:B11")

然后如何在sumifs函數中引用數組的列? (sumifs函數中的前兩個條目)

e = WorksheetFunction.SumIfs(?, ?, "J")

最后,我將使用更大的數據集,如果可能的話,我不想創建大量單獨的Ranges,而不會創建一個數組。

您可以創建一個自定義函數來執行此操作:

Public Function SumIf(lookupTable() As Variant, lookupValue As String) As Long
    Dim I As Long

    SumIf = 0

    For I = LBound(lookupTable) To UBound(lookupTable)
        If lookupTable(I, 1) = lookupValue Then
            SumIf = SumIf + lookupTable(I, 2)
        End If
    Next I
End Function
Sub M_snb()
  msgbox [sum((A1:A9)*(B1:B9="J"))]
End Sub

要么

Sub M_snb()
  msgbox [sumproduct((A1:A9)*(B1:B9="J"))]
end sub

要么

Sub M_snb()
  msgbox [sum(if(B1:B9="J",A1:A9,0))]
end sub

感謝您的評論和答案。 我不必使用數組,但這是我的首選,並且保持范圍很好。 我確實發現Ranges做到了。 我做了以下

 Sub test() 
 Dim s As Range 
 Set s = Range("A2:B11") 
 e = WorksheetFunction.SumIfs(s.Columns(1), s.Columns(2), "J")
 MsgBox e 
 End Sub

這也給了我我想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM