0

我是 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 代码获取输出。

4

3 回答 3

11

正如其他人所建议的那样,aPivot Table将是完成此任务的最简单方法。就是这样:

1)选择要计算的行

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

3)将出现一个窗口,单击Ok以创建您的数据透视表:

在此处输入图像描述

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

在此处输入图像描述

5)现在将您刚刚单击的复选框字段向下拖动到“值”列表并松开:

在此处输入图像描述

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

在此处输入图像描述

于 2013-02-15T19:49:31.713 回答
3

这个宏会做你需要的:

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")
于 2013-02-15T14:31:37.773 回答
2

COUNTIF(range, value) 函数将执行您想要的操作 - 它的优点是您可以更轻松地限制要搜索的值(与数据透视表相比)。想象一下您的数据在您命名为“客户”的范围“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 中向下拖动 - 您无需再次输入。

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

于 2013-02-15T14:33:16.320 回答