如何使用VBA计算重复值

时间:2013-02-15 13:49:24

标签: excel vba excel-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的任何帮助。

3 个答案:

答案 0 :(得分:11)

正如其他人所建议的那样,Pivot Table将是实现这一目标的最简单方法。方法如下:

  

1)选择要计算的行

     

2)选择Insert -> PivotTable   从功能区

     

3)会出现一个窗口,点击Ok创建您的支点   表:

enter image description here

  

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

enter image description here

  

5)现在将您刚刚点击的复选框字段拖到“值”列表中然后放开:

enter image description here

  

6)就是这样!您现在将拥有您要求的内容:

enter image description here

答案 1 :(得分:4)

这个宏可以满足您的需求:

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 Scripting Library 的引用(Tools-&gt; References)。你可以这样称呼它:

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

答案 2 :(得分:2)

COUNTIF(范围,值)功能可以满足您的需求 - 它的优势在于您可以更轻松地约束要搜索的值(与数据透视表相比)。想象一下,您的数据在“Sheet1!A1:A25”范围内,您将其命名为“customers”(您可以通过选择范围并在公式栏左侧的地址框中键入customers来完成此操作)。并包含“客户1,客户2 ......通过客户10”,而您只想知道客户1和5出现的次数,您可以在sheet2上创建以下内容

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

当然,您只需将公式从单元格B1中拖出即可 - 您无需再次输入该公式。

这会计算客户数量,自动更新,...我认为这比此示例中的数据透视表更容易。