![](/img/trans.png)
[英]Countif criteria with IF/OR logic across multiple sheets and columns
[英]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
例:
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.