CountIfs日期范围AND条件,可能是VBA解决方案

时间:2012-07-31 16:40:47

标签: excel vba excel-vba excel-formula

好的,这是我当前代码的示例。我在几个单元格中有这个,其中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。在D列的“旧数据”表中,我有开始时间,以MM / DD / YY HH:MM格式显示。在E栏中,我有结束时间,它以相同的MM / DD / YY HH:MM格式显示。

我需要有办法

A。)让程序计算这些日期之间的天数和每个日期的计数+1。

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

我的第一个想法是抓住countifs公式并循环并使用VBA解析它,但我想我先检查是否可以使用公式来完成内置函数的强大功能到目前为止,我一直很惊讶。

我想我应该把它从公式转换为VBA函数并在单元格中调用它,但我不完全确定,对于VBA / Excel场景来说还是新手。

另外,我在Excel 2007中。

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

1 个答案:

答案 0 :(得分: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)))

使用CTRL + SHIFT + ENTER确认

我将数据范围限制为第2行到第100行,根据需要进行调整,可以使用整列,但这可能会大大减慢公式

要计算工作日,只需更改为此版本:

=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))))

如果您将节日范围添加到NETWORKDAYS功能

,也可以排除假期