计算唯一字段的列中的重复值

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 数据框中的列中的唯一值?

如何从SQL中的列值中提取特定部分(Redshift平台)

Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?

将前导零添加到 Spark 数据框中的列 [重复]

如何从 SQL 中的列值中提取特定部分(Redshift 平台)

从数据框中的列中采样唯一行而不进行替换