在 VBA Dictionary 中将“ABC”、“abc”、“ABC ”视为相同重复项:键标准化的技巧

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

关于本文
本文是通过利用生成式 AI 的自动生成流程创建的。在确认了 Microsoft Learn 的 Dictionary object 官方资料后,重点关注的不是重复统计本身,而是如何在实际业务中统一前后空格和大小写的“键标准化”。

验证状态:📘 已通过微软官方确认・未在 Excel 实机上验证

在 Excel 的重复检查中,外观几乎相同的数据有时会被当作不同的数据来计算。

例如,

ABC
abc
ABC 

如果想忽略末尾空格和大小写的差异,在放入 Dictionary 之前,需要先决定“什么视为相同”并对键进行标准化

首先是容易出错的例子

如果直接放入 Dictionary,值的差异就会变成键的差异。

Sub CountRawKeys()

    Dim d As Object
    Dim v As Variant

    Set d = CreateObject("Scripting.Dictionary")

    For Each v In Array("ABC", "abc", "ABC ")

        If d.Exists(CStr(v)) Then
            d(CStr(v)) = d(CStr(v)) + 1
        Else
            d.Add CStr(v), 1
        End If

    Next v

    For Each v In d.Keys
        Debug.Print "[" & v & "]", d(v)
    Next v

End Sub

在这种情况下,带有末尾空格的 ABC 是不同的键。

去除前后空格

将键的生成集中到一处。

Private Function NormalizeKey(ByVal value As Variant) As String

    ' 前後の半角スペースを取り除いて文字列化する
    NormalizeKey = Trim$(CStr(value))

End Function

在统计端,

Dim key As String
key = NormalizeKey(v)

处理后再放入 Dictionary。

将大小写视为相同

CompareModevbTextCompare 设为

Set d = CreateObject("Scripting.Dictionary")

' データを追加する前に設定する
d.CompareMode = vbTextCompare

。这样就可以将 ABCabc 作为相同的键进行比较。

面向实务的最小形态

Sub CountNormalizedKeys()

    Dim d As Object
    Dim v As Variant
    Dim key As String

    Set d = CreateObject("Scripting.Dictionary")
    d.CompareMode = vbTextCompare

    For Each v In Array("ABC", "abc", "ABC ", "XYZ")

        key = Trim$(CStr(v))

        ' 空白だけのデータを数えない例
        If Len(key) > 0 Then

            If d.Exists(key) Then
                d(key) = d(key) + 1
            Else
                d.Add key, 1
            End If

        End If

    Next v

    For Each v In d.Keys
        Debug.Print v, d(v)
    Next v

End Sub

在这个例子中,ABC 系列被合并为 3 项。

标准化并非“越强越好”

例如,如果员工代码中的 abcABC 确实是不同的代码,就不能忽略大小写。

同理,

  • 00123123

  • 全角数字与半角数字

  • 有/无连字符

  • 有/无空格

是否可以视作相同取决于业务规则。

flowchart LR
A[元データ] --> B[業務ルールを決める]
B --> C[NormalizeKey]
C --> D[DictionaryのKey]
D --> E[重複件数]

如何在工作中应用

  • 客户代码重复

  • 去除电子邮箱地址的前后空格

  • 部门名称的表述不统一

  • CSV 导入前检查

  • 主数据核对

  • 申请数据的重复检查

在这种情况下,比起 Dictionary 的书写方式,如何创建键对质量的影响更大。

在 Excel 单元格区域中使用时

面对大量数据时,与其逐个单元格读取,不如先将数据获取到数组中再进行标准化和统计会更容易处理。

此外,与其修改并标准化原始数据,不如单独为 Dictionary 创建键,这样就能在保留原始数据的同时进行检查。

总结

  • 在重复判断中,首先要确定“什么算作相同”

  • 可以使用 Trim 去除前后空格

  • 可以通过 CompareMode 决定大小写的比较策略

  • 过度标准化存在将原本不同的值视作相同的风险

  • 将 NormalizeKey 集中到一个函数中可以更方便地管理业务规则

官方信息与第一手资料

文档信息

文章??
在 VBA Dictionary 中将“ABC”、“abc”、“ABC ”视为相同重复项:键标准化的技巧
?布日期
更新日期
来源
https://papanda925.com/?p=15392&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制