如何使用VBA对重复值进行计数

我是VBA的新手,我试图find在特定列中重复相同值的次数。

然后,我需要将值和重复值的计数粘贴在另一张纸的A栏和B栏中。

我需要重复次数的次数:

PSV_Cust_1 PSV_Cust_1 PSV_Cust_1 PSV_Cust_1 PSV_Cust_1 PSV_Cust_2 PSV_Cust_2 PSV_Cust_2 PSV_Cust_2 PSV_Cust_3 PSV_Cust_3 PSV_Cust_3 PSV_Cust_3 PSV_Cust_4 PSV_Cust_4 PSV_Cust_4 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 PSV_Cust_5 

结果应该是:

 Value Count PSV_Cust_1 5 PSV_Cust_2 4 PSV_Cust_3 4 PSV_Cust_4 3 PSV_Cust_5 7 

请任何人帮助使用VBA代码获得输出。

正如其他人所build议的,一个Pivot Table将是实现这一点的最简单的方法。 就是这样:

1)select你想要计数的行

2)从function区中selectInsert -> PivotTable

3)将出现一个窗口,点击Ok创build数据透视表:

在这里输入图像说明

4)在“数据透视表字段列表:select要添加到报告的字段”右侧的下方,单击下一个checkbox:

在这里输入图像说明

5)现在将刚刚单击的checkbox字段拖到“值”列表中,放开:

在这里输入图像说明

6)就是这样! 你现在将得到你所要求的:

在这里输入图像说明

这个macros将做你所需要的:

 Sub Summarize(rngSource As Range, rngTarget As Range) Dim d As New Scripting.Dictionary Dim rng As Range Dim var As Variant For Each rng In rngSource If rng <> "" Then If d.Exists(rng.Value) Then d(rng.Value) = d(rng.Value) + 1 Else d.Add rng.Value, 1 End If End If Next rng rngTarget = "Value" rngTarget.Offset(, 1) = "Count" Set rng = rngTarget.Offset(1) For Each var In d.Keys rng = var rng.Offset(, 1) = d(var) Set rng = rng.Offset(1) Next End Sub 

您需要在Visual Basic编辑器(工具 – >参考)中添加对Microsoft脚本库的引用。 你可以这样调用它:

 Summarize Sheet1.Range("A1:A24"), Sheet1.Range("C1") 

COUNTIF(range,value)函数可以做你想做的事情 – 它的优点是你可以更容易地约束你想要search的值(与数据透视表比较)。 假设你的数据在“Sheet1!A1:A25”的范围内,你已经命名为“customers”(你可以通过select范围并在公式栏左边的地址栏中inputcustomers来完成),并且包含“customer 1,客户2 …通过客户10“,并且您只想知道客户1和5出现了多less次,您可以在表2中创build以下内容

 col A col B Value count customer 1 =COUNTIF(customers, A1) customer 5 =COUNTIF(customers, A2) 

当然,您可以从B1单元格中拖拽公式 – 不需要再次input。

这将统计客户,自动更新,…我认为这比在这个例子中的数据透视表更容易。