【问题标题】:How to count repeated values using VBA如何使用 VBA 计算重复值
【发布时间】:2013-01-31 12:22:47
【问题描述】:

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

【问题讨论】:

  • 使用数据透视表。你不需要 vba :)
  • 到目前为止您尝试过什么?您可以使用数据透视表或 COUNTIF 等工作表函数。

标签: vba excel


【解决方案1】:

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

1)选择你要统计的行数

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

3) 会出现一个窗口,点击Ok 来创建你的pivot 表:

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

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

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

【讨论】:

  • 谢谢!图片让事情变得如此简单。
  • 谢谢,我将使用 pvote table 选项,我现在可以退出了
  • 如果此答案或任何其他答案有助于解决您的问题,请将其标记为已解决。它可以帮助其他人知道您的问题有解决方案。
【解决方案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 中向下拖动 - 您无需再次输入。

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

【讨论】:

  • 如果您想捕获不断变化的客户列表,我认为它比数据透视表更容易。
  • @DougGlancy - 我同意你的看法。我将其作为替代方案“如果您只想知道某些客户出现的次数”。我不喜欢数据透视表的另一件事是它们可以更改大小,并且需要重新计算。我认为 OP 会从看到替代方案中受益。我并不是说这是“更好”,只是“不同”——我认为 Siddarth Rout 获得的 9 个“有用”标志应该足以让 OP 注意到数据透视表的概念......
【解决方案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")

【讨论】:

  • 谢谢,我将使用 pvote table 选项,我现在可以退出了
猜你喜欢
  • 2021-04-02
  • 2015-05-07
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多