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

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

问题描述:

我是VBA的新手,我试图找到在特定列中重复相同值的次数。如何使用VBA对重复值进行计数

然后我需要将值和重复值的计数粘贴到另一个工作表的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代码得到outpu。

+13

使用数据透视表。你不需要vba :) – 2013-02-15 13:51:49

+1

你到目前为止尝试过什么?您可以使用数据透视表或COUNTIF等工作表函数。 – 2013-02-15 13:54:32

这个宏会做你需要的东西:

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编辑器(工具 - >引用)添加到微软脚本库。你可以这样调用:

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

谢谢你,我将使用pvote表格选项,我现在可以让我出去 – user2075655 2013-02-18 08:32:01

的COUNTIF(范围值)功能会做你想要的东西 - 它的优点是,可以更方便地限制你要搜索的值(相对于枢轴表)。假设您的数据处于您命名为“客户”的范围“Sheet1!A1:A25”中(您可以通过选择范围并在公式栏左侧的地址栏中输入customers来实现此目的),并且包含“客户1,顾客2 ...通过客户10" ,和你只想知道多少次的客户1和5的出现,您可以创建在Sheet2上以下

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

当然你也可以从刚刚拖动单元格公式向下B1 - 你不需要再次输入。

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

+3

如果你想捕捉一个不断变化的客户列表,我不认为它比数据透视表更容易。 – 2013-02-15 14:54:32

+0

@DougGlancy - 我同意你的意见。我将此作为替代方案“如果您只想知道某些客户出现的次数”。我不喜欢数据透视表的另一件事是他们可以改变大小,并且需要重新计算。我认为OP会从看到替代品中受益。我不是说这是“更好”,只是“不同” - 我认为Siddarth Rout得到的9个“有用”标志应该足以让OP注意到数据透视表的概念...... – Floris 2013-02-15 15:07:04

正如其他人所建议的,Pivot Table将是最简单的方法来实现这一点。具体方法如下:

1)选择你要计算

2)从色带

3)在出现的窗口中选择Insert -> PivotTable 行,单击Ok到创建您的关键点 表格:

enter image description here

4)在下面的权利 “数据透视表字段列表:选择字段添加到报告:” 点击旁边的复选框:

enter image description here

5 )现在将刚刚单击下来的复选框字段拖到“值”列表中,然后释放:

enter image description here

6)这就是它!现在,您将有你的要求为:

enter image description here

+1

不错的演练! +1 – 2013-02-15 23:55:10

+0

谢谢!图片让事情变得如此简单。 – Sam 2013-02-16 02:19:20

+0

谢谢,我将使用pvote表格选项,我现在可以让我出去 – user2075655 2013-02-18 08:32:35