我是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的任何帮助。
答案 0 :(得分:11)
正如其他人所建议的那样,Pivot Table
将是实现这一目标的最简单方法。方法如下:
1)选择要计算的行
2)选择
Insert -> PivotTable
从功能区3)会出现一个窗口,点击
Ok
创建您的支点 表:
4)在“数据透视表字段列表:选择要添加到报告的字段:”下的右侧,单击下一个复选框:
5)现在将您刚刚点击的复选框字段拖到“值”列表中然后放开:
6)就是这样!您现在将拥有您要求的内容:
答案 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中拖出即可 - 您无需再次输入该公式。
这会计算客户数量,自动更新,...我认为这比此示例中的数据透视表更容易。