自动计算当年填写的特定单元格值的数量 - 每年

Auto calculate amount of specific cell values filled in current year - every year

我正在尝试让我的 excel sheet 提取每年访问过特定访问的人员列表 - 例如 - 我想了解人们参加年度访问的频率疫苗 - 这是输入到每项工作的第 27 行 sheet(结果除外),然后我使用查找将最新结果填充到单元格 E13[=35= 中人员文件的顶部](也在每部作品上sheet)。

=LOOKUP(2,1/(27:27<>""),27:27)

但是我希望我的结果sheet统计今年有多少人在单元B14中接种了年度疫苗(并自动计算未来的每一年 - 所以在 2017 年我必须更改代码。

我正在使用一个模块从不同的工作中提取结果sheets(每个人都有一份工作sheet):(也将其用于其他结果,但今年是难倒我)

Function myCountIfs(Rng1 As Range, Criteria1, Rng2 As Range, Criteria2) As Long

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Summary-Sheet" And ws.Name <> "Notes" And ws.Name <> "Results" Then
        myCountIfs = myCountIfs + WorksheetFunction.CountIfs(ws.Range(Rng1.Address), Criteria1, ws.Range(Rng2.Address), Criteria2)
    End If
Next ws
End Function

我无法弄清楚如何在使用此模块时从当年提取信息。 我试过使用,但我每年都必须手动更改它,我希望它自动更改

=my3COUNTIFS(E13,"<="&YEAR(2016),E13,">="&YEAR(2015)-1, I7,"Yes")

具有以下 VBA:I7 是另一个必须调用的函数 - 如果 I7 是 "Yes" 并且 E13 有今年的日期,那么要计算的信息

    Function my3CountIfs(Rng1 As Range, Criteria1 As String, Rng2 As Range, Criteria2 As String, Rng3 As Range, Criteria3 As String) As Long

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

Select Case ws.Name
    Case "Summary-Sheet", "Notes", "Results"
        ' do nothing

    Case Else
         my3CountIfs = my3CountIfs + Application.CountIfs(ws.Range(Rng1.Address), Criteria1, ws.Range(Rng2.Address), Criteria2)

End Select
Next ws

End Function

这是工作人员sheet(他们都是一样的) Persons file

这是结果页面,我希望在单元格 B14 中显示年份 Results page

非常感谢任何帮助

试试下面修改后的 UDF:

Option Explicit

Function my3CountIfs(Rng1 As Range, EndYear As Variant, Rng2 As Range, StartYear As Variant, Rng3 As Range, Criteria3 As String) As Long

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

    Select Case ws.Name
        Case "Summary-Sheet", "Notes", "Results"
            ' do nothing

        Case Else
            ' needed to use regular Ifs here
            If Year(CDate(ws.Range(Rng1.Address))) >= CInt(StartYear) And Year(CDate(ws.Range(Rng2.Address))) <= CInt(EndYear) Then
                If ws.Range(Rng3.Address) = Criteria3 Then  ' if 3rd range (I7) = "Yes"
                    my3CountIfs = my3CountIfs + 1
                End If
            End If

    End Select
Next ws

End Function

但是,为了从 Excel sheet 的(您的示例中的单元格 B14)调用它,请使用下面的行:

=my3CountIfs(E13,2016,E13,2015,I7,"Yes")

请参阅下面的屏幕截图,了解在 Excel 中使用此 UDF 的示例:2 sheet 在单元格 I7 中有 "YES",单元格 E13 中的日期是 15/12/2016.因此结果是 2.