我正在尝试将电子表格中的数据匿名化。
如何取名并将其转换为随机生成的6位数代码?
有一点需要注意,我的数据集不止一次包含联系人。如何处理重复项,并为它们分配与前一个条目相同的字符串?
帮助表示赞赏。
最好的问候
劳埃德
我正在寻找以下内容:
Col A | Col B
foo.bar@gmail.com 124556
bar.foo@gmail.com 445643
foo.bar@gmail.com 124556
答案 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位数代码都会更改。但是,您可以通过简单地复制新表,然后粘贴特殊值来永久修复这些代码来解决这个问题。