计算唯一字段的列中的重复值
Posted
技术标签:
【中文标题】计算唯一字段的列中的重复值【英文标题】:count repeated values in column for unique fileds 【发布时间】:2017-11-19 00:30:47 【问题描述】:我有 2 个应该在 VBA 代码中执行的 qns。 1. 我想计算特定字符串在列中重复超过 40 个唯一值的总次数。如何实现。
对于例如 Apple、banana、grass 等唯一值(另外 40 个唯一值)在一列中重复,我想要这样的单个字符串的计数。
Apple- 30 times repeated
banana- 4 times repeated.
-
在计算每个字符串的总数后,我想用特定的标准来统计它们。
例如-计算苹果,仅当成本高于 40 时 数葡萄,仅当成本高于 40 时
任何人都可以帮助解决这个问题,如何在 VBA 代码中实现这一点。
【问题讨论】:
这是作业吗?您自己尝试过任何代码吗? 【参考方案1】:以下代码将 A 列中的所有字符串添加到集合结构中,在计算每个唯一值的同时对其进行排序,并将每个唯一值和相应的总和存储在字典结构中。然后将结果打印到“立即”窗口。希望这会有所帮助。
Sub main()
'variables
Dim colCollection As New Collection
Dim x, q As Variant
Dim cellValue As String
Dim j, i, count As Integer
Dim numbers As New Scripting.Dictionary 'NOTE: add microsoft scripting Runtime Ref
x = 1 'collections start at 1
While Worksheets("Sheet1").Cells(x, "A").Value <> "" 'while cell is not empty
cellValue = Worksheets("Sheet1").Cells(x, "A").Value 'store string value from cell
colCollection.Add (cellValue) ' add entry from cell to collection
x = x + 1 'increment
Wend
'Sort collection (bubbble sort) and record number of each unique item
For i = colCollection.count To 2 Step -1 'count down from collection
For j = 1 To i - 1
'bubble up item
If colCollection(j) > colCollection(j + 1) Then
colCollection.Add colCollection(j), After:=j + 1
colCollection.Remove j
End If
Next j
'finding count of unique item
If i <> colCollection.count Then 'if not at last item (can't compare 2 items when only given 1)
If i = 2 Then 'if at end
numbers.Add colCollection(i), count + 3 'add sum to dictionary with corresponding key value
Else
If StrComp(colCollection(i + 1), colCollection(i), 1) = 0 Then 'if same string
count = count + 1 'increment count
Else
numbers.Add colCollection(i + 1), count + 1 'add sum to dictionary with corresponding key value
count = 0 'reset count
End If
End If
End If
Next i
'loop through dictionary
For Each q In numbers.Keys
Debug.Print q & "- " & numbers.Item(q); " times repeated."
Next
End Sub
【讨论】:
以上是关于计算唯一字段的列中的重复值的主要内容,如果未能解决你的问题,请参考以下文章
像 Qlik 一样计算 pandas 数据框中的列中的唯一值?
Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?