簡體   English   中英

如何在VBA中的矩陣中跨行檢查條件

[英]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.

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