首页 > 解决方案 > 如何批量替换Excel中的重复项?

问题描述

如何批量替换现有数据中的重复文本字符串?我有一个 Excel 文件,其中包含 order#、PersonName 和 ID,一些(不同的)order# 共享一组相同的 PersonName 和 ID,必须用其他唯一的 PersonName 和 ID 替换(对于相同的订单也可以#具有相同的 PersonName 和 ID,但不同的 order# 必须具有不同的 PersonName 和 ID)。我有另一个现有数据表,其中包含用于此替换目的的 PersonName 和 ID 列表,但是如何编写一个公式以使用此现有数据表自动替换不同 order# 上的所有重复的 PersonName 和 ID?不应删除重复项,而应仅将其替换为唯一的字符串值。

样本数据(所有数据都是不真实的):

原始数据

空缺名称和 ID 示例:

空缺姓名和身份证

结果将用第一个可用的空名称和 ID 替换重复项(相同的订单号被分配相同的名称和 ID 集):

样本输出

我真的是这方面的新手,花了很多时间寻找可能类似的问题并试图找出解决方案,但无法提出解决方案。:(

标签: excelvbaexcel-formuladuplicates

解决方案


试试下面的 vba 代码。A 列 = Order#,B 列 = PersonName,D 列 = ID,空缺名称 = E 列,F 列 = 空 ID。

Sub SortData()
Dim Arr01 As Variant
Dim Arr02 As Variant

Dim i01 As Integer 'Temp int number
Dim i02 As Integer 'Temp int number
Dim i03 As Integer 'Temp int number
Dim i04 As Integer 'Temp int number


'Array of the "Order#, PersonName, ID"
Arr01 = Range("A2", Range("C2").End(xlDown))

'Array of the "Vacant name, Vacant ID"
Arr02 = Range("E2", Range("F2").End(xlDown))

i03 = 1
For i01 = 2 To UBound(Arr01, 1)
    For i02 = 1 To UBound(Arr01, 1)
        If i02 = i01 Then
            i02 = 1
            GoTo line1
        End If
        If Arr01(i02, 2) = Arr01(i01, 2) And Arr01(i02, 1) <> Arr01(i01, 1) Then
            Arr01(i01, 2) = Arr02(i03, 1)
            Arr01(i01, 3) = Arr02(i03, 2)
            i03 = 1 + i03
        End If
        
For i04 = i01 + 1 To UBound(Arr01, 1)
        If Arr01(i01, 1) = Arr01(i04, 1) Then
            Arr01(i04, 2) = Arr02(i01, 1)
            Arr01(i04, 3) = Arr02(i01, 2)
        End If
Next i04

        If i02 = i01 Then
            i02 = 1
            GoTo line1
        End If
    Next i02
line1:
Next i01

For i01 = i02 To UBound(Arr01, 1)
    For i02 = 1 To UBound(Arr01, 1)
        If Arr01(i01, 1) = Arr01(i02, 1) And Arr01(i01, 2) = Arr01(i02, 2) Then
            Arr01(i01, 3) = Arr01(i02, 3)
        End If
    Next i02
Next i01


Range("A2", Range("C2").End(xlDown)) = Arr01
End Sub

推荐阅读