我正在处理Excel VBA中的数据验证。
我收到了员工,日期和数量的列表,在进行进一步处理之前,我需要检查任何日期(B列)的任何员工(A列)是否有一定数量以上的东西(C列;有条件的总和) )。
作为示例,假设我要检查以下格式的传入工作表:
...,如果任何员工每天有超过一个完整的cookie,我需要提出警告。 (在该示例中,它应该发出警告,因为Ben在1月1日有1.2个cookie。)
假设:
我目前的方法是过滤A列和B列以获取唯一值,循环访问这两个列表,并应用SumIfS求和C列中的各个值。但是,由于涉及许多嵌套循环,因此这似乎完全没有效率。而是“ Excel”方式而不是“ VBA”方式。
如何正确使用VBA解决此问题?
答案 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")
如果您需要VBA解决方案,请查看WorksheetFunction.SumIfs method或将带有VBA的公式写入列:
Range("E2:E20").Formula = "=SUMIFS(C:C,A:A,A:A,B:B,B:B)" '<-- takes only english formula
例如以便稍后使用它进行轻松过滤(例如,获取所有胖雇员的列表)。