【问题标题】:Excel: Replace name with randomly generated IDExcel:用随机生成的 ID 替换名称
【发布时间】:2014-09-18 11:18:53
【问题描述】:

我正在尝试对电子表格中的数据进行匿名处理。

我怎样才能把一个名字变成一个随机生成的,比如 6 位数的代码?

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

帮助表示赞赏。

最好的问候

劳埃德

我正在寻找以下内容:

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

【问题讨论】:

标签: excel replace


【解决方案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

【讨论】:

    【解决方案2】:

    此技术最初在此处描述为 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 位代码都会发生变化。但是,您可以通过简单地复制新表,然后粘贴特殊值来永久修复这些代码来解决此问题。

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 2016-10-10
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多