簡體   English   中英

COUNTIFS function 跨多個工作表工作

[英]COUNTIFS function working across multiple sheets

在此處輸入圖像描述

如何在我當前的代碼集中包含一個 vlookup 以對所有類似工作表中的所有 vlookup 結果進行計數。 我擁有的代碼將嘗試對一個指定單元格或列或行中的整個數據范圍的工作表執行 countif。 相反,我希望下面的 function 能夠計算跨相似名稱工作表的列中的 vlookup 結果數。

Function myCountIfSheet1(rng As Range, criteria) As Long
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name Like "Sheet1*" Then
            myCountIfSheet1 = myCountIfSheet1 + WorksheetFunction.CountIf(ws.Range(rng.Address), criteria)
        End If
    Next ws
End Function



Public Function shifted_lookup(lookup_value As Variant, table_array As Range, column_index As Integer, range_lookup As Integer) As Variant
    Dim curr_wsname As String, oth_wsname As String
    Dim curr_ws As Worksheet, oth_ws As Worksheet
    Set curr_ws = ActiveSheet
    curr_wsname = curr_ws.Name
    oth_wsname = Right(curr_wsname, 3)
    Set oth_ws = Worksheets(oth_wsname)
    Dim src_rng_base As String, src_rng As Range
    src_rng_base = table_array.Address
    Set src_rng = oth_ws.Range(src_rng_base)
    Dim aux As Variant
    shifted_lookup = Application.WorksheetFunction.VLookup(lookup_value, src_rng, column_index, range_lookup)
End Function

這應該可以完成這項工作。 請試一試。

Function myCountIfSheet1(Rng As Range, _
                         Clm1 As Long, _
                         Crit1 As Variant, _
                         Clm2 As Long, _
                         Crit2 As Variant) As Long
    ' 011

    Dim Fun As Long                         ' function return value
    Dim Ws As Worksheet

    For Each Ws In ThisWorkbook.Worksheets
        With Ws
            If .Name Like "Sheet1*" Then
                Fun = Fun + WorksheetFunction.CountIfs( _
                            .Range(Rng.Columns(Clm1).Address), Crit1, _
                            .Range(Rng.Columns(Clm2).Address), Crit2)
            End If
        End With
    Next Ws

    myCountIfSheet1 = Fun
End Function

為了便於調用,我構造了 function 調用以僅提供一個范圍地址。 在我的測試中,我使用了 A1:D30。 列 (A) 包含一個標准,列 (D) 包含另一個。 當然,列(A)是范圍的第一列 - 列(1) - 列 D 是范圍的列(4)。 因此,以下 function 調用將在 A 列中查找“3”,在 D 列中查找“red”。

Debug.Print myCountIfSheet1(Range("A1:D30"), 4, "red", 1, 3)

標准的順序無關緊要。 您還可以使用相同的結構添加更多條件。

暫無
暫無

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

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