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

时间:2016-12-13 09:59:39

标签: excel vba excel-vba date countif

我试图让我的excel表格列出每年访问过一次的人员名单 - 例如 - 我想看看人们每年接种疫苗的频率 - 这是输入第27行的每个工作表(结果除外)然后我使用查找将最新结果填入单元格 E13 (也在每个工作表上)的人员文件的顶部。

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

但后来我希望我的结果表计算今年每年有多少人在细胞 B14 中获得年度疫苗(并自动计算每年的未来 - 所以在2017年,我必须更改代码。

我正在使用一个模块从不同的工作表中提取结果(每个人都得到一张工作表):(使用它来获取其他结果,但当前年份让我感到难过)

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是&#34;是&#34;和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

这是人工作表(它们都是一样的) Persons file

这是结果页面,我希望年份进入单元格B14 Results page

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

尝试下面修改过的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工作表中调用它(在您的示例中为单元格B14),请使用以下行:

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

请参阅下面的屏幕截图,例如在Excel中使用此UDF:2张有&#34; YES&#34;在单元格I7中,单元格E13中的日期是15/12/2016。因此结果是2。

enter image description here