excel随机生成数字或者字母、以及指定范围生成随机字符串
1、生成随机数字
(1)生成随机数比较简单,=rand()即可生成0-1之间的随机数;
(2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推;
另外RANDBETWEEN(a,b)可返回a到b之间的随机整数(不过此函数需加载宏“分析工具库”)
(3)如果要生成a与b之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。
注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来!
2、产生随机字母
随机小写字母:=CHAR(INT(RAND()*26)+97)或=CHAR(RANDBETWEEN(97,122))
随机大写字母:=CHAR(INT(RAND()*26)+65)或=CHAR(RANDBETWEEN(65,90))
随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))或
excel的随机数函数=IF(INT(RAND()*2)=0,CHAR(RANDBETWEEN(97,122)),CHAR(RANDBETWEEN(65,90)))
3、产生随机的六位数的字母和数字混合
=CONCATENATE(IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RA ND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT( RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(I NT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),I F(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CH AR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHA R(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48) ),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))))
产生随机的10位数的大小写混合字母和数字混合:
=CONCATENATE(IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0, CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(IN T(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*2 5+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT (RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()* 9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF( INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*2 5+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(I NT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAN D()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CH AR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND ()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))),IF(INT(RAND()*2)=0,C HAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*25+65)),CHAR(INT(R AND()*25+97)))),IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,C HAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97)))))
4、随机不重复数字序列的生成方法
有些情形下,我们需要生成一个不重复的随机序列。
比如:我们要模拟洗牌,将一副扑克牌去掉大小怪后剩下的52张打乱。
比较笨的方法是在1-52间每生成一个随机数后,检查该随机数是否出现过,如果是第一次出现,就放到序列里,否则重新生成一个随机数作检查。在excel worksheet里面用这种办法,会造成if多层嵌套,不胜其烦,在VBA里面做简单一些,但是效率太差,越到序列的后端,效率越差。
当然也有比较好的办法,在VBA里面,将a(1)-a(52)分别赋予1-52,然后做52次循环,例如,第s次生成一个1-52间的随机数r,将a(s)与a(r)互换,这样的话,就打乱了原有序列,得到一个不重复的随机序列。
VBA里这个算法是很容易实现的,但是,出于通用性和安全考虑,有的时候我们并不希望用VBA,我们来看看在worksheet里面如何利用内置函数实现这个功能。
(1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的
(2)在B1-B52间填入1-52
(3)在C54-BB54填入1-52
(4)在C1填入
"=IF(ROW()=C$54,INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$ A$52,C$54),INDEX(B$1:B$52,C$54),B1))"。
分项解释:
a:ROW()=C$54,如果当前行等于当前交换所排的序号
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A52中的第C54个值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值
e:若以上条件都不满足,则返回B1
(5)将C1复制到C1:BA52这个区域里面
(6)在BA1:BA52中,我们就得到了一个不重复的随机序列,按F9可以生成一个新序列。随机产生六位数字密码=INT(RAND()*(899999-10001))+100001
EXCEL生成前2位是大写字母,中间4位是小写字母,后两位是数字
=CHAR(65+INT(RAND()*16))&CHAR(65+INT(RAND()*16))&CHAR(97+INT(RAND()*16)) &CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16))&CHAR(97+INT(RAND()*16)) &INT(RAND()*10)&INT(RAND()*10)
5、想要实现这样的功能:总共13位数,前面固定了是12358的数字,后面8位随机生成数字(1-9不要0)加大写字母(只要ABCDE)。这是霏凡论坛里一位朋友需要的,解决如下:
(1)=CONCATENATE("12358",IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(R
AND()*(69.5-65))+65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAN D()*(69.5-65))+65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*
(69.5-65))+65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*(69.
5-65))+65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*(69.5-6
5))+65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*(69.5-65))+
65)),IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*(69.5-65))+65))
,IF(INT(RAND()*2)=0,INT(RAND()*(9.5-1))+1,CHAR(INT(RAND()*(69.5-65))+65))) (2)=CONCATENATE("12358",IF(INT(RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RAND
BETWEEN(65,69))),IF(INT(RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETW EEN(65,69))),IF(INT(RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETWEEN(6 5,69))),IF(INT(RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETWEEN(65,69))), IF(INT(RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETWEEN(65,69))),IF(INT( RAND()*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETWEEN(65,69))),IF(INT(RAND( )*2)=0,RANDBETWEEN(1,9),CHAR(RANDBETWEEN(65,69))),IF(INT(RAND()*2)=0, RANDBETWEEN(1,9),CHAR(RANDBETWEEN(65,69))))
(3)另外“事了”霏友也提出了用VBA解决
Sub padding()
Dim strPadding As Variant
Dim strRet As Variant
Dim row, col, rowMax, colMax, cnt, cntMax As Integer
' row 单元格行
' col 单元格列
' cnt 随机生成数的个数
' rowMax 最多生成多少行
' colMax 最多生成多少列
' cntMax 最大需要随机数个数-1
' 要生成更多的数修改rowmax 和 colMax
' 需要更多的随机位数修改 cntMax
rowMax = 100
colMax = 10
cntMax = 7
strPadding = Array("A", "B", "C", "D", "E", "1", "2", "3", "4", "5", "6", "7", "8", "9")
For col = 1 TocolMax
For row = 1 TorowMax
strRet = 12358
For cnt = 0 TocntMax
Randomize
strRet = strRet&strPadding(Int(Rnd * 14) Mod 13)
Next cnt
Cells(row, col) = strRet
Next row
Next col
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论