2016-06-14 106 views
1

我有三列:ID,事件和月份。我需要根据ID获得按月唯一的事件数。VBA:计数符合两个条件的唯一值

到目前为止,我每月有活动的计数(在五月例如,1806点独特的登录),使用COUNTIFS(范围( “B2:B276609”),事件名称,范围(C2:C76602" ),M)。)

如何过滤这个上面计正在使用这样只有数内的唯一ID?请注意,我必须循环这个通过一束事件类型和月。

为了使这更清晰,让我提供一些示例数据:

ID Event Month 
1 Login May 16 
2 click July 16 
1 Save June 16 
1 Login May 16 
3 Save June 16 

由此我需要获得以下信息:

1 unique login in May 16 
2 unique saves in June 16 
1 unique click in July 16 
+0

该解决方案允许您从表中获取的所有唯一值:http://stackoverflow.com/questions/1429899/getting-unique-values-in-excel-by-using-formulas-only如果您需要基于两列的唯一*值,那么您可以(1)创建一个组合两列的助手列,或者(2)在比较值的唯一性之前,将公式中的列与数组公式中的列组合。 – Ralph

+0

你有没有vba的方式做到这一点?如果是的话,你有什么版本的Excel? – chungtinhlakho

+1

这是一个简单的聚合SQL查询,它可以**在Excel VBA中运行,并在当前工作簿上调用ADO。没有嵌套循环或者如果/然后条件需要。 – Parfait

回答

1

您可以使用Excel的内置remove duplicates功能。

ActiveSheet.Range("A2:C76602").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes 
+0

是的!不敢相信我没有想到做这个简单的前置步骤。 – ysrome

1

基于其可以在这里找到here在拉尔夫的评论的链接,你可以获得:

要知道你有多少独特的项目有您可以使用此规则公式:

=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1)) 

然后,我将其扩展到多个列,只需将countif公式更改为countifs即可。 (显然使用不同的范围)。

=SUM(IF(FREQUENCY(COUNTIFS($A$1:$A$10,"<"&$A$1:$A$10,$B$1:$B$10,"<"&$B$1:$B$10),COUNTIFS($A$1:$A$10,"<"&$A$1:$A$10,$B$1:$B$10,"<"&$B$1:$B$10)),1))