如何修改VBA代码为Excel拼接生成的唯一值匹配首条对应描述
调整后可实现需求的VBA代码
Sub 拼接去重匹配首次描述() Dim Ary As Variant Dim r As Long Dim lastRow As Long Dim combineKey As String ' 可选:运行前清空C、E列旧输出数据,避免残留 Range("C2:C" & Rows.Count).ClearContents Range("E2:E" & Rows.Count).ClearContents ' 获取A列最后有效行号 lastRow = Range("A" & Rows.Count).End(xlUp).Row ' 读取A-C列全部有效数据,包含原C列描述 Ary = Range("A2:C" & lastRow).Value2 With CreateObject("scripting.dictionary") For r = 1 To UBound(Ary) ' 拼接A、B列作为唯一键 combineKey = Ary(r, 1) & " " & Ary(r, 2) ' 仅当键首次出现时,存储对应原C列内容,重复键不覆盖 If Not .Exists(combineKey) Then .Item(combineKey) = Ary(r, 3) End If Next r ' 输出拼接唯一值到C列 Range("C2").Resize(.Count).Value = Application.Transpose(.Keys) ' 输出对应首次出现的描述到E列 Range("E2").Resize(.Count).Value = Application.Transpose(.Items) End With End Sub
核心修改点说明
- 扩展数据读取范围:从原逻辑仅读A、B列,调整为读取A到C列,获取原C列的描述字段
- 字典存储逻辑优化:新增键存在性判断,仅首次出现的拼接键会存入对应的原C列内容,后续重复出现的同拼接键不会覆盖已存储的值,保证取到的是首次出现的描述
- 新增E列输出逻辑:将字典中存储的首次描述内容批量输出到E列,和C列的拼接唯一值一一对应
内容的提问来源于stack exchange,提问作者Drawleeh
相关产品推荐
相关产品推荐

