循环检查总和,具体取决于具有未知条目的几列

时间:2019-02-01 08:07:46

标签: excel vba excel-formula

我正在处理Excel VBA中的数据验证。

我收到了员工,日期和数量的列表,在进行进一步处理之前,我需要检查任何日期(B列)的任何员工(A列)是否有一定数量以上的东西(C列;有条件的总和) )。

作为示例,假设我要检查以下格式的传入工作表:

Example

...,如果任何员工每天有超过一个完整的cookie,我需要提出警告。 (在该示例中,它应该发出警告,因为Ben在1月1日有1.2个cookie。)

假设:

  • 我不知道名单上有哪些名字。
  • 我不知道这个人每天有多少条目。
  • 我不知道传入工作表中条目的顺序。

我目前的方法是过滤A列和B列以获取唯一值,循环访问这两个列表,并应用SumIfS求和C列中的各个值。但是,由于涉及许多嵌套循环,因此这似乎完全没有效率。而是“ Excel”方式而不是“ VBA”方式。

如何正确使用VBA解决此问题?

1 个答案:

答案 0 :(得分:1)

只需使用SUMIFS function来获取每位员工每天有一天的Cookie总数:

=SUMIFS(C:C,A:A,A:A,B:B,B:B) 'alternatively =SUMIFS(C:C,A:A,A2,B:B,B2)

=IF(SUMIFS(C:C,A:A,A:A,B:B,B:B) > 1,A:A & " is too fat", A:A & " can eat more")

对于德语Excel,请使用:

=SUMMEWENNS(C:C;A:A;A:A;B:B;B:B) 'alternatively =SUMMEWENNS(C:C;A:A;A2;B:B;B2)

=WENN(SUMMEWENNS(C:C;A:A;A:A;B:B;B:B) > 1;A:A & " is too fat"; A:A & " can eat more")

enter image description here

如果您需要VBA解决方案,请查看WorksheetFunction.SumIfs method或将带有VBA的公式写入列:

Range("E2:E20").Formula = "=SUMIFS(C:C,A:A,A:A,B:B,B:B)" '<-- takes only english formula

例如以便稍后使用它进行轻松过滤(例如,获取所有胖雇员的列表)。