Excel:使用随机生成的ID替换名称

时间:2014-09-18 11:18:53

标签: excel replace

我正在尝试将电子表格中的数据匿名化。

如何取名并将其转换为随机生成的6位数代码?

有一点需要注意,我的数据集不止一次包含联系人。如何处理重复项,并为它们分配与前一个条目相同的字符串?

帮助表示赞赏。

最好的问候

劳埃德

我正在寻找以下内容:

Col A              | Col B
foo.bar@gmail.com   124556
bar.foo@gmail.com   445643
foo.bar@gmail.com   124556

2 个答案:

答案 0 :(得分:1)

这是一个基于宏的解决方案。
第一部分使用非重复的6位数值填充 B 列。
第二部分解决了 A

Sub SecretCoder()
    Dim col As Collection, i As Long, N As Long, _
        j As Long, v As String, codee As String, _
        ncodee As Long, wf As WorksheetFunction
    Set col = New Collection
    Set wf = Application.WorksheetFunction
    N = Cells(Rows.Count, "A").End(xlUp).Row
    i = 1

    'First Part

    On Error Resume Next
    While col.Count < N
        DoEvents
        ncodee = wf.RandBetween(100000, 999999)
        col.Add ncodee, CStr(ncodee)
        If Err.Number = 0 Then
            Cells(i, 2).Value = ncodee
            i = i + 1
        Else
            Err.Number = 0
        End If
    Wend
    On Error GoTo 0

    'Second Part

    For i = 2 To N
        v = Cells(i, 1).Text
        For j = 1 To i - 1
            If v = Cells(j, 1).Value Then
                Cells(i, 2).Value = Cells(j, 2).Value
                GoTo donV
            End If
        Next j
donV:
    Next i

End Sub

答案 1 :(得分:0)

此技术最初在此处by Excellll on SuperUser进行了描述。

您只需在新标签页上删除电子邮件地址列的副本,删除重复项,然后在相邻列中输入

=RAND()

在第三栏中,输入

=RANK(B1,$B$1:$B$999)+100000

RAND产生的随机浮点小数的几率可以忽略不计,任何两个数字都是相同的。对它们进行排名会生成整数,您可以在其中添加100000(或任何6位数字)以使代码为6位数。

回到原始表格中,您只需VLOOKUP对着新表格。

=VLOOKUP(A2,NewSheet!$A$1:$C$999,3,0)

注意每次重新计算工作簿时,6位数代码都会更改。但是,您可以通过简单地复制新表,然后粘贴特殊值来永久修复这些代码来解决这个问题。