我想从Excel中的字母创建一个随机长度的随机字符串。例如,“ jlskdjf”,“ kjlk”,“ kljsodif”等。我该怎么做?
我想从Excel中的字母创建一个随机长度的随机字符串。例如,“ jlskdjf”,“ kjlk”,“ kljsodif”等。我该怎么做?
Answers:
假设要从小写字母(az)生成随机长度(1-8个字符)的字符串。
=LEFT( CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97),
RAND()*8+1)
每个CHAR(...)
生成一个随机的小写字母。
要使用大写字母(AZ)而不是小写字母,可以替换CHAR(RAND()*26+97)
为CHAR(RAND()*26+65)
。因为AZ的ASCII码是65-90,而az的ASCII码是97-122。
为了简单的公式,你可以使用RANDBETWEEN()
的分析工具库来替代RAND()*xx+yy
。
假设您要根据特定字符生成一个随机长度(1-8个字符)的字符串。
您可以在单元格A1中输入所需的字符,例如:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
然后,
=LEFT( MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1),
RAND()*8+1)
每个人MID(...)
都从A1获得1个随机字符。
作为单个字符的公式,您可以使用此
=CHAR(RANDBETWEEN(97,122))
只需查看任何ACSII表即可选择所需的兰特范围。
但是随机长度是棘手的,这不是因为随机长度,而是因为您想要放在一起的随机字符。否则,您可以只将REPT函数与RAND函数和上面的公式结合使用。
但是为了适合您描述的结果,我将使用以下代码:
'Put this into a VBA-Module, to be accessable as a worksheet function
Public Function RandomString() As String
Dim i As Long
Dim lngEnd As Long
Dim strResult As String
With Application.WorksheetFunction
lngEnd = .RandBetween(1, 20) 'String length 1-20 characters
strResult = ""
'create a random string of a random length between 1 and 20
For i = 1 To lngEnd
strResult = strResult & Chr(.RandBetween(97, 122))
Next i
End With
Debug.Print strResult
RandomString = strResult 'return the random string
End Function
如果有解决方案可以使用公式执行此代码,因此如果没有VBA,我非常想知道它:)
此公式不需要带有“ abc ... ABC ... 012”的单元格
从[a-zA-Z0-9]中随机抽取1个字符。
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
如果需要更多字符,请复制CHAR(...)并用&分隔。
此解决方案来自Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(如果您只需要字母字母的字符串,请参见下面添加的段落)
生成一个随机字符串,由大写字母和数字组成,长度在8到12之间:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
说明:
BASE(RAND()*10^18,36,12)
。诀窍是生成一个大的随机数,然后将其转换为基数36,以获得实际上看起来像字符串的东西。RAND()*4+8
公式中使用的函数(由内而外):
RAND()
返回0到1之间的随机数。BASE(Number; Radix; [MinimumLength])
将正整数转换为指定的基数,然后转换为编号系统中的文本。使用数字0-9和字母AZ。MID("Text"; Start; Number)
返回文本的文本字符串。参数指定起始位置和字符数。该数字10^18
是一个魔幻数字,为其生成的字符串没有尾随零或前导零。如果您需要创建更长的字符串,我建议创建两个或更多这样的字符串并将它们连接起来。
请注意:此解决方案已在LibreOffice Calc 5上进行了测试,但由于其功能与其文档相同(因此我无法链接,因为我没有足够的声誉),因此该解决方案也应在Microsoft Excel中工作。
既然在评论中指出,OP仅要求提供字母,所以我将在以下版本中使用此替代版本:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),1,RAND()*4+8)
您将所有出现的数字替换为空字符串。这样,您仅获得(大写)字母。我已经调整了魔术数字,以计算初始随机字符串具有多个数字的可能性。它不是故障安全的,尽管从某种意义上说,原则上您可以获得比预期短的字符串。
如果需要确保最小长度,则可以使用其他(甚至更复杂)的替代方法:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",CHAR(RANDBETWEEN(65,90))),"1",CHAR(RANDBETWEEN(65,90))),"2",CHAR(RANDBETWEEN(65,90))),"3",CHAR(RANDBETWEEN(65,90))),"4",CHAR(RANDBETWEEN(65,90))),"5",CHAR(RANDBETWEEN(65,90))),"6",CHAR(RANDBETWEEN(65,90))),"7",CHAR(RANDBETWEEN(65,90))),"8",CHAR(RANDBETWEEN(65,90))),"9",CHAR(RANDBETWEEN(65,90))),1,RAND()*4+8)
您用随机生成的大写字母替换每个数字。
我必须说,相对于其他答案中提供的解决方案,我喜欢初始解决方案的原因是它简洁明了,相对容易理解。这两种选择失去了这些特性。
INDEX(B1:B10,RANDBETWEEN(1,10))