[英]How can I check for a condition across rows in a matrix in VBA
輸入:我在Excel工作表中有一個范圍。 假設“ Sheet 1”上的B1:F100 = 100X5矩陣。
現在,我要計算從B到F的任何列(從1到100行)中都包含“數據”的行數。 即我正在尋找一個函數,比如說ExistIfRow(B1:F100),它將返回一個0X或1S的100X1數組。 所以我可以簡單地做一個sum(ExistIfRow(B1:F100))以獲取行數。 我希望能夠選擇100個單元格並將此函數作為數組公式輸入,以在工作表中獲得該100X1的結果。
我希望這是有道理的。
另外,我嘗試創建此函數,但是當我嘗試將其放在單元格中時,該函數未顯示在我的excel工作表中。 有人可以幫我看看我在做什么錯嗎? 此功能存在於工作表中的“模塊”下。
Function RowWiseOR(Rin As Range, Condition As Variant) As Range
Dim rw As Range
Dim Out As Variant
Dim i As Integer
i = 0
For Each rw In Rin.Rows
If WorksheetFunction.CountIf(rw, Condition) > 0 Then Out(i).Value = 1 Else Out(i).Value = 0
i = i + 1
End
RowWiseOR = Out
End Function
我不確定為什么“它沒有顯示”,但是函數本身存在一些問題。 特別,
Variant
數組,而不是Range
Out
初始化為數組以保存結果 .Value
屬性。 例如,使用Out(i) = 1
代替Out(i).Value = 1
Transpose
置數組。 修改后的功能,請參見以下內容:
Function RowWiseOR(Rin As Range, Condition As Variant) As Variant
Dim rw As Range
Dim Out As Variant
Dim i As Integer
i = 0
ReDim Out(Rin.Rows.Count - 1)
For Each rw In Rin.Rows
If WorksheetFunction.CountIf(rw, Condition) > 0 Then Out(i) = 1 Else Out(i) = 0
i = i + 1
Next
RowWiseOR = Application.Transpose(Out)
End Function
請記住將其作為數組公式輸入。 有關更多信息,請參見此處 。
Countif之所以給出錯誤的原因是因為countif不適用於數組。 在excel中嘗試相同的操作,您將再次收到錯誤消息。
我也不明白為什么你需要創建一個函數來計數0或1。 這可以通過excel中的countif公式輕松實現-COUNTIF(A1:C3,“ data”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.