【问题标题】:CountIfs date range AND conditional, possibly a VBA solutionCountIfs 日期范围和条件,可能是 VBA 解决方案
【发布时间】:2012-08-01 04:22:19
【问题描述】:

好的,这是我当前的代码示例。我在几个单元格中有这个,其中 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,则只在计数器上添加 0.5。

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

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

另外,我使用的是 Excel 2007。

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

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案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&gt;$B$5)*('Old Data'!$D$2:$D$100&lt;$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100&lt;"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&gt;$B$5)*('Old Data'!$D$2:$D$100&lt;$C$5),IF('Old Data'!$E$2:$E$100-'Old Data'!$D$2:$D$100&lt;"4:00"+0,0.5,NETWORKDAYS('Old Data'!$D$2:$D$100+0,'Old Data'!$E$2:$E$100+0))))

    如果您向 NETWORKDAYS 函数添加假期范围,您也可以排除假期

    【讨论】:

    • 是否可以通过任意数量的行?该列表目前为 1600,并且永远被添加到其中。当前公式仅返回 FALSE
    • 例如,将 100 更改为 10000 应该不是问题,为了将来的扩展,我会避免整列,因为 100 万行会导致公式变慢,* 在数组公式中是实际上是“AND”条件(您可以使用多个 IF 作为替代)。确保您“输入”公式 - 放入单元格中,按 F2,然后按住 CTRL 和 SHIFT 键并按 ENTER,以便像 { 和 } 这样的花括号出现在公式栏中的公式周围
    • 使用 A:A 等将起作用,但使用这种公式是不可取的(COUNTIFS 可以引用像 A:A 这样的整个列,但实际上它只会查看使用过的单元格,那是t 这里的情况),正如我所说,最好使用允许一些扩展的范围(另一种选择是使用动态范围)
    • @Floppityflip 如果您想避免使用整个列引用,但又不想每次都手动更新公式,请尝试使用dynamic defined range。它还使您的公式更具可读性! :)
    • 是的,您可以从另一个值中减去我建议的公式,但这仍然是一个“数组公式” - Chip Pearson 在此链接中解释 cpearson.com/excel/ArrayFormulas.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2011-07-06
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多