Excel VBA-如何在一个单元格中标识年份(日期),然后检查另一个单元格中的数据,然后计数

Excel VBA-如何在一个单元格中标识年份(日期),然后检查另一个单元格中的数据,然后计数,excel,vba,date,if-statement,count,Excel,Vba,Date,If Statement,Count,救命啊!在这里Excel VBA是相当新的,我现在正在学习一些付费课程以提高自己,但我遇到了一个路障,谷歌没有给我带来我想要的结果 我有一个不断增长的跟踪电子表格,它在一列中显示我们处理过的数据(我们称之为“构建”),然后在另一列中显示我们检查过(我们称之为已审核)我们处理过的数据。我想找出被处理的年份,并找出它是否被审计,而不管审计的年份是什么,如果是的话,把它加起来。我想每年都这样做,所以2017年、2018年、2019年、2020年等等 最后,将每年的调查结果放在仪表板单元格中 例如,搜索

救命啊!在这里Excel VBA是相当新的,我现在正在学习一些付费课程以提高自己,但我遇到了一个路障,谷歌没有给我带来我想要的结果

我有一个不断增长的跟踪电子表格,它在一列中显示我们处理过的数据(我们称之为“构建”),然后在另一列中显示我们检查过(我们称之为已审核)我们处理过的数据。我想找出被处理的年份,并找出它是否被审计,而不管审计的年份是什么,如果是的话,把它加起来。我想每年都这样做,所以2017年、2018年、2019年、2020年等等

最后,将每年的调查结果放在仪表板单元格中

例如,搜索J列,其中包含我们处理2017年数据的日期,然后查看同一行中的已审核列(其中也包含日期),如果其中有任何内容,并计算1。然后反复进行,直到检查完整个范围。每次我们找到2017年的日期时,我们都会添加一个,并且每年都这样做。在搜索结束时,需要将每年的结果输入到仪表板表中

有没有一种方法可以编写代码,让it每年都进行检查,而不必每年都特别地调用

这是我到目前为止得到的结果,但我一直遇到一个错误。或者是“下一个没有为”和其他我现在记不起来的。我在谷歌上搜索并添加了各种各样的东西,移动它等等。我确信我在这里做了一些非常明显的错误,但我只是没有看到。请帮个新手


Sub CountAudits()
暗淡的CellBuild As范围
Dim CellAudit As范围
Dim CellDateCount2017与长
对于Sheet1.Range(“J:J500”)中的每个CellBuild,J列包含一个日期MMYYDD,我们称之为“build”,换句话说,我们处理了它。
如果CellBuild.Value=“2017”,则“此项检查其处理日期是否在2017年
对于Sheet1.Range(“Q:Q500”)中的每个CellAudit,这是包含审计日期的列。如果未经审核,则为空。
如果CellAudit.Value为“”,则此选项将检查是否已对其进行审核。我不在乎日期,只要牢房里有东西
CellDateCount2017=CellDateCount2017+1'如果处理的日期是2017年且经过审核,则在此添加一个计数1。
退出
Sheet2.Range(“V18”).Value=CellDateCount2017“Sheet2是仪表板的工作表代码名
“下一个”我在这里一直得到一个“下一个没有为”的错误。我已经添加了各种各样的结束,结束如果,等等,但我不明白。
如果结束
端接头

我找到了SUMPRODUCT,我想我可以用它来计算2017年在我的专栏中出现的次数,但我如何让它加起来并放到仪表板上呢?e、 g.
SUMPRODUCT(1*(年份(J1:J500)=2017))


要是弄明白这件事没那么有趣的话,我就可以走开了!我一直被“this excel VBA stuff is Fund”错误所困扰。

您正在嵌套FOR和IF错误。请尝试下面的代码。我没有检查功能,只是更正了循环:

Sub CountAudits()

Dim CellBuild As Range
Dim CellAudit As Range
Dim CellDateCount2017 As Long

    For Each CellBuild In Sheet1.Range("J:J500") 'column J contains a date MMYYDD what we call "build" data in other words we processed it.

        If CellBuild.Value = "2017" Then 'this checks if the date it was processed was in 2017

            For Each CellAudit In Sheet1.Range("Q:Q500") 'this is the column containing the date it was audited. It will be blank if it was not audited.

                If CellAudit.Value <> "" Then 'this checks if it's been audited. I don't care about the date just as long a there is something in the cell

                CellDateCount2017 = CellDateCount2017 + 1 'if the processed date was 2017 and it was audited it adds a count of 1 to here.

                End If

            Next CellAudit

            Sheet2.Range("V18").Value = CellDateCount2017 'Sheet2 is the sheet code name to the dashboard

        End If

    Next CellBuild

End Sub
Sub CountAudits()
暗淡的CellBuild As范围
Dim CellAudit As范围
Dim CellDateCount2017与长
对于Sheet1.Range(“J:J500”)中的每个CellBuild,J列包含一个日期MMYYDD,我们称之为“build”,换句话说,我们处理了它。
如果CellBuild.Value=“2017”,则“此项检查其处理日期是否在2017年
对于Sheet1.Range(“Q:Q500”)中的每个CellAudit,这是包含审计日期的列。如果未经审核,则为空。
如果CellAudit.Value为“”,则此选项将检查是否已对其进行审核。我不在乎日期,只要牢房里有东西
CellDateCount2017=CellDateCount2017+1'如果处理的日期是2017年且经过审核,则在此添加一个计数1。
如果结束
下一个单元审计
Sheet2.Range(“V18”).Value=CellDateCount2017“Sheet2是仪表板的工作表代码名
如果结束
下一个细胞构建
端接头

您正在嵌套FOR和IF错误。请尝试下面的代码。我没有检查功能,只是更正了循环:

Sub CountAudits()

Dim CellBuild As Range
Dim CellAudit As Range
Dim CellDateCount2017 As Long

    For Each CellBuild In Sheet1.Range("J:J500") 'column J contains a date MMYYDD what we call "build" data in other words we processed it.

        If CellBuild.Value = "2017" Then 'this checks if the date it was processed was in 2017

            For Each CellAudit In Sheet1.Range("Q:Q500") 'this is the column containing the date it was audited. It will be blank if it was not audited.

                If CellAudit.Value <> "" Then 'this checks if it's been audited. I don't care about the date just as long a there is something in the cell

                CellDateCount2017 = CellDateCount2017 + 1 'if the processed date was 2017 and it was audited it adds a count of 1 to here.

                End If

            Next CellAudit

            Sheet2.Range("V18").Value = CellDateCount2017 'Sheet2 is the sheet code name to the dashboard

        End If

    Next CellBuild

End Sub
Sub CountAudits()
暗淡的CellBuild As范围
Dim CellAudit As范围
Dim CellDateCount2017与长
对于Sheet1.Range(“J:J500”)中的每个CellBuild,J列包含一个日期MMYYDD,我们称之为“build”,换句话说,我们处理了它。
如果CellBuild.Value=“2017”,则“此项检查其处理日期是否在2017年
对于Sheet1.Range(“Q:Q500”)中的每个CellAudit,这是包含审计日期的列。如果未经审核,则为空。
如果CellAudit.Value为“”,则此选项将检查是否已对其进行审核。我不在乎日期,只要牢房里有东西
CellDateCount2017=CellDateCount2017+1'如果处理的日期是2017年且经过审核,则在此添加一个计数1。
如果结束
下一个单元审计
Sheet2.Range(“V18”).Value=CellDateCount2017“Sheet2是仪表板的工作表代码名
如果结束
下一个细胞构建
端接头

添加另一个每年运行的外部循环。但我会研究过滤,然后计算返回的数量。为什么不直接使用
WorksheetFunction.CountIfs
?和-将
结束(如果
)移动到下一个
之前。嗯,您缺少了一些
End If
s和
Next
。另一个有用的工具:an:)它将阐明其中一些问题。添加另一个每年都会发生的外部循环。但我会研究过滤,然后计算返回的数量。为什么不直接使用
WorksheetFunction.CountIfs
?和-将
结束(如果
)移动到下一个
之前。嗯,您缺少了一些
End If
s,还有一个
Next
。Ano