0

好的,这是我当前代码的示例。我在几个单元格中有这个,其中 B-H7 反映了它正在搜索的缺席类型。

=COUNTIFS('Old Data'!$A:$A,Tracking!A8,'Old Data'!$B:$B,$E$7, 'Old Data'!D:D, ">"&$B$5, 'Old Data'!D:D, "<"&$C$5)

这段代码所做的是遍历电子表格,在数据表中找到员工姓名,比较缺勤类型并将它们分类到各自的列并计算它们,最后一段代码限制了日期范围之间的搜索。

话虽如此,我需要为此添加条件,如果不将其带入 VBA,我不确定是否可以。在 DI 列的“旧数据”表中有开始时间,以 MM/DD/YY HH:MM 格式显示。在 EI 列中有结束时间,以相同的 MM/DD/YY HH:MM 格式显示。

我需要有办法

A.) 让程序计算这些日期之间的天数,并为每一天的计数加 1。

B.) 如果开始日期和结束日期相同,让程序比较小时数。如果小于 4,则只向计数器添加 0.5。

我的第一个想法是从头开始计算 countifs 公式并循环遍历并使用 VBA 解析它,但我想我先检查一下是否可以仅使用公式来完成,因为内置函数的功能非常令人惊讶对我来说到目前为止。

我想我可能应该把它从一个公式带到一个 VBA 函数并在单元格中调用它,但我不完全确定,这对 VBA/Excel 场景来说很新。

另外,我在 Excel 2007 中。

感谢您对此问题的任何意见!

4

1 回答 1

1

可以使用公式,但不能使用 COUNTIFS。这个数组公式应该做到这一点

=SUM(IF(('Old Data'!$A$2:$A$100=Tracking!A8)*('Old Data'!$B$2:$B$100=$E$7)*('Old Data'!$D$2:$D$100>$B$5)*('Old Data'!$D$2:$D$100<$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100<"4:00"+0,0.5,INT('Old Data'!$E$2:$E$100)-INT('Old Data'!$D$2:$D$100)+1)))

confirmed with CTRL+SHIFT+ENTER

I restricted the data range to rows 2 to 100, adjust as required, whole columns is possible but that may slow down the formula considerably

To count workdays only change to this version:

=SUM(IF(('Old Data'!$A$2:$A$100=Tracking!A8)*('Old Data'!$B$2:$B$100=$E$7)*('Old Data'!$D$2:$D$100>$B$5)*('Old Data'!$D$2:$D$100<$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100<"4:00"+0,0.5,NETWORKDAYS('Old Data'!$D$2:$D$100+0,'Old Data'!$E$2:$E$100+0))))

You can also exclude holidays if you add a holiday range to the NETWORKDAYS function

于 2012-07-31T17:43:39.067 回答