如何使用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区中select
Insert -> 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。
这将统计客户,自动更新,…我认为这比在这个例子中的数据透视表更容易。