Vba 找到价值->;90个单元格的总和->;下降->;重复

Vba 找到价值->;90个单元格的总和->;下降->;重复,vba,excel,Vba,Excel,我有这个电子表格,我正在做一段时间。这基本上是一篇文章。最终用户跟踪员工,无论他们是否出现等 我已经厌倦了查找循环,但我不知道如何做我正在尝试做的事情 我在这个excel里有什么 A-D:Emp信息 E-∞ : 1-3天/日期;4-∞ emp数据(如果他们错过了一天,该数据的值) 要获得更好的理解,请参阅 从E5到xx输入的数据就是我试图使vba工作的地方 脚本检测到第一个值“1”或“2”的任何内容,都从那里开始90天(单元格)。90后,重置为0。从91开始搜索“1”或“2”,并执行类似操作 请

我有这个电子表格,我正在做一段时间。这基本上是一篇文章。最终用户跟踪员工,无论他们是否出现等

我已经厌倦了查找循环,但我不知道如何做我正在尝试做的事情

我在这个excel里有什么

A-D:Emp信息
E-∞ : 1-3天/日期;4-∞ emp数据(如果他们错过了一天,该数据的值)

要获得更好的理解,请参阅

从E5到xx输入的数据就是我试图使vba工作的地方

脚本检测到第一个值“1”或“2”的任何内容,都从那里开始90天(单元格)。90后,重置为0。从91开始搜索“1”或“2”,并执行类似操作

请参阅excel文件以了解更多信息。如果没有意义,我很乐意简化


谢谢

处理此问题最有效、最简洁的方法是使用一种形式的,因为它不需要使用VBA代码就可以轻松完成。电子表格中有两个简单的表格,EmployeeInfo和AttendanceRecords。您的员工信息如下所示

Emp#    Name    Craft           # In 90 Days    NumOf2s NumOf1s
1       EMP 1   SM Site Manager 0               0       0
2       EMP 2   SM Site Manager 1               0       1
3       EMP 3   SM Site Manager 0               0       0
4       EMP 4   SM Site Manager 0               0       0
5       EMP 5   SM Site Manager 1               0       1
最后三列是根据AttendanceRecords表计算的。此表的大小将是可变的,但这样您只需要存储重要数据(当员工实际得到分数时)。看起来是这样的

Emp#    Date        Days    Count
1       12/1/2013   122     1
3       1/1/2014    91      2
2       2/1/2014    60      1
5       2/15/2014   46      1
同一天和同一员工可以有多个条目。重要的是,我们每个违规只需要一个条目(注意:为了在适当的数据库类型模型中实现这一点,每个考勤记录还应该具有某种递增的完全唯一的ID(如员工),但对于此应用程序,我们可以放弃此项)

输入员工编号、日期和计数。“天”列然后使用以下公式自动计算记录的年限:

=TODAY()-[@Date]
注意:如果
[@Date]
符号看起来不熟悉,这是因为它处理Excel表格。如果你还不熟悉,我推荐你

现在我们有了每一张唱片的年代。所以回到EmployeeInfo表,我们使用以下公式获得过去90天内适用于员工x的所有AttendanceRecords

=SUMIFS(AttendanceRecords[Count],AttendanceRecords[Emp'#],[@[Emp'#]],AttendanceRecords[Days],"<=90")

对于EMP 1,此公式使用employees行作为总和范围。然后查看第3行相应列中的日期字段。如果第3行中的日期是
>今天()-90
,则我们将其添加到计数中。这将至少回顾过去90天的违规行为。

您能提供更多细节吗?为什么是90天?如果员工在90跨度的中间加入公司,会发生什么情况?这是最后90天还是固定的90天窗口?“1”或“2”意味着什么?只有当该员工有活动时,才是90天。如果您看到excel文件,您将看到“1”或“2”。因此,任何时候如果员工迟到或没有出现,他/她都会有“1”或“2”。从那天起,他/她将开始90天。如果他们不做任何事情,他们就什么也不会发生。它固定了90天的窗口“1”或“2”,如果emp上班迟到;吃了更长时间的午餐等。。。因此,员工在一天内可能发生两次事故。这就是为什么。所以它是按行求和的?你想把总数印在哪里?在D列中,但如果有一个以上的90天周期呢?您是否已经写入了任何内容?第一个90天周期结束后,D列将重置。但是更新后的excel有最后一列从一开始就进行汇总。这很好,但是可以使用同一个文件(链接到我的主要帖子中的那个文件)吗?他们不想创建一个包含两个表的新表。Thanks@SB89,我不太明白。你的意思是使用你在问题中发布的当前文件?重用当前表?仅使用一页?可能混淆之处在于Excel文件(通常称为工作簿)、工作簿中的一张工作表(通常称为工作表)和表(工作表中的一个元素)之间的区别。@SB89,请尝试下载。如果你不能,让我来know@SB89,看看我最近对我的帖子的编辑,我至少有一个公式可以用来查看前90天的内容并添加违规内容。至于删除旧的日子,这是另一个可以解决的问题,但希望我添加的公式暂时能帮助您解决一些问题。
=COUNTIFS(AttendanceRecords[Emp'#],[@[Emp'#]],AttendanceRecords[Days],"<=90",AttendanceRecords[Count],2)

=COUNTIFS(AttendanceRecords[Emp'#],[@[Emp'#]],AttendanceRecords[Days],"<=90",AttendanceRecords[Count],1)
=SUMIFS($E5:$BR5,$E$3:$BR$3,">"&(TODAY()-90))