簡體   English   中英

使用條件/參數跨多個工作表計算

[英]Countif across multiple sheets with criteria/parameters

我在b,e,h,k和n列中有一個每周評分的電子表格,其中有5種不同的類別,其中我每周都會創建原始表格的新副本,並在該周輸入是或否。 我想在匯總表上匯總所有這些成績,以便工作表1計算每個相應列中“ sheet2”到“ last”表中“ y”的數量。 然后,我可以除以該范圍內的工作表數,以獲得在b,e等各列中輸入的y的百分比。對於創建函數和使用vba來說,我還很陌生,所以我真的很努力。

最棘手的部分是我希望函數能夠接受以下參數/參數:從哪個工作表開始計數,從哪個工作表停止計數,要計算什么(在這種情況下為y,但可能會在我的下一個工作簿中進行更改或添加新類別),從哪個單元格開始計數,因為我想對每張圖紙上的單個單元格進行計數,因此b7是圖紙范圍內僅b7的匯總。

這是我微弱的嘗試:

Function mycountif(start As Variant, last As Variant, Cell As Variant, criteria As Variant) 'define name and parameters

Dim count As Integer

count = 0

For Each Worksheet In Worksheet.range(start, last)
count = count + Application.WorksheetFunction.CountIf(range(Cell), criteria)

Next Worksheet

mycountif = count

End Function

我是該社區的新手,如果還有其他需要澄清的地方,請告訴我。

非常感謝您可以提供的任何幫助。

不知道其余代碼是什么樣子,並假設需要幫助的部分是上面發布的內容:

嘗試一下以使您的ws計數正常工作。

有關代碼的一些注意事項:

  • 您有一個函數,但未設置為返回任何函數。 您需要在參數后聲明返回的內容。

例:

Function mycountif(args1, arg2, arg3, arg4) As Long  
  • 長整數比整數更好。
  • 要遍歷工作表,您需要將正在使用的變量ws聲明為工作表,然后遍歷工作表,並使用IF語句有選擇地使用它們,而不是僅遍歷滿足條件的變量,然后循環然后對每個人進行測試。
  • 我必須假設您正在向其中傳遞有效變量,並且知道為什么以及如何使用它們。

例:

Function mycountif(start As Variant, last As Variant, Cell As Variant, criteria As Variant) As Long

'define name and parameters
Dim ws As Worksheet
Dim count As Long

    count = 0

    For Each ws In Worksheets
        If ws.Index >= start And ws.Index <= last Then
            count = count + Application.WorksheetFunction.CountIf(Range(Cell), criteria)
        End If
    Next ws

    mycountif = count

End Function

您也可以測試工作表名稱。 例如,如果您有sheet1,sheet2,sheet3。

'Convert the result of extracting the right character from the ws.Name into sheetNum As Long.
    sheetNum = CLng(Right(ws.name, 1))
'Then test the sheetNum

另一個選擇是將標簽添加到要使用的每個工作表中,然后測試標簽。 '如果ws.Tag =那么

這是指向您可以訪問的所有可用工作表屬性的鏈接

您與for each都很接近,但不幸的是,您不能那樣循環。
通過循環瀏覽所有工作表,並在工作表之間切換計數(然后關閉),您可以決定要計數的工作表。
我們還需要對計入工作表中的工作表進行計數,以便隨后獲得平均值。

這是我想出的:

Option Explicit

Function MultiCountIf(criteria, CommonRange As String, StartSheet As String, EndSheet As String) As Variant
Dim LoopVar As Long
Dim Tot As Long
Dim CountThis As Boolean
Dim NumSheets As Long

Tot = 0
CountThis = False
NumSheets = 0

For LoopVar = 0 To Sheets.Count
    If Sheets(LoopVar).Name = StartSheet Then CountThis = Not CountThis
    If CountThis Then
        NumSheets = NumSheets + 1
        Tot = Tot + WorksheetFunction.CountIf(Sheets(LoopVar).Range(CommonRange), criteria)
    End If
    If Sheets(LoopVar).Name = EndSheet Then CountThis = Not CountThis
Next LoopVar

If NumSheets = 0 Then
    MultiCountIf = CVErr(xlErrDiv0)
Else
    MultiCountIf = Tot / NumSheets
End If
End Function

暫無
暫無

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

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