我们有一个 Excel 2013 工作簿,用于创建新用户帐户(A 列用于名字,B 列用于姓氏,C 列用于密码,等等)。
First name Last name Password
John Doe #s$r28
Jane Doe #s$r29
Some User #s$r30
密码文本的格式基本上类似于#s$r28(此列当前使用静态文本)。当我们创建新用户时,我们使用 Excel 2013 中的填充柄将工作表中的最后一行复制到下一行,这会将密码列单元格的内容增加 1(一),以便新复制行中新用户的密码将变为#s$r29,然后下一个复制的密码将变为#s$r30,依此类推。但是,这种方法并不是我所说的最佳实践,并且不会生成真正随机的密码。
我可以使用以下公式轻松生成随机密码:
=RANDBETWEEN(0,9)&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(33,47))
但我的问题是,对 Excel 工作表的任何更新都会导致公式再次触发,并且 Excel 会更新整个密码列中显示的所有以前的密码。从技术上讲这是可以的,但是工作簿是为了历史记录而保留的,我想创建一个随机密码,该密码不会在每次复制行时更新。我搜索过但无法解决我的问题。我不认为我想用公式的结果替换新单元格中公式的内容(如果可能的话),因为我们仍然需要在创建下一个用户时将其复制到下一行(所以我认为密码列单元格需要保留为公式)。那么,是否有可能仅在将行复制到新行时触发公式?或者是否可以在 Excel 中创建一个只触发一次的公式?或者还有其他我没看到的方法可能有效?
提前致谢
答案1
公式的概念就是它们会反复触发。您可以通过仅修复它们的值来禁用它们。如果您想要一个固定值,您可以求助于使用 VBA。我会添加一个 Sub,当您调用它时它会创建密码,如下所示:
Sub ertdfgcvb(Target As Range)
For Each Cell In Target
Cell.Formula = "=RANDBETWEEN(0,9)&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(33,47))"
Cell.Value2 = Cell.Value2
Next
End Sub
答案2
计算一次,复制公式范围,然后选择性粘贴(右键单击目标,然后S)将值仅粘贴回范围。这会用结果替换公式,并防止重新计算随机密码。