excel 生成 随机 字母
发布网友
发布时间:2022-05-04 13:00
我来回答
共4个回答
热心网友
时间:2022-04-18 05:19
1、生成随机数字
(1)生成随机数比较简单,=rand()即可生成0-1之间的随机数;
(2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推;
(3)如果要生成a与b之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。
注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来!
2、产生随机字母
随机小写字母:=CHAR(INT(RAND()*26)+97)
随机大写字母:=CHAR(INT(RAND()*26)+65)
随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))
3、产生随机的六位数的字母和数字混合
=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(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()*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()*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可以生成一个新序列。
参考资料:http://hi.baidu.com/%B9%FE%C4%E1%E9%AA/blog/item/a3b03d1b95426dd3ac6e7508.html
热心网友
时间:2022-04-18 06:37
=CHAR(RANDBETWEEN(65,90))&IF(RAND()>0.5,CHAR(RANDBETWEEN(65,90)),CHAR(RANDBETWEEN(48,57)))&IF(RAND()>0.5,CHAR(RANDBETWEEN(65,90)),CHAR(RANDBETWEEN(48,57)))&IF(RAND()>0.5,CHAR(RANDBETWEEN(65,90)),CHAR(RANDBETWEEN(48,57)))&IF(RAND()>0.5,CHAR(RANDBETWEEN(65,90)),CHAR(RANDBETWEEN(48,57)))&IF(RAND()>0.5,CHAR(RANDBETWEEN(65,90)),CHAR(RANDBETWEEN(48,57)))
热心网友
时间:2022-04-18 08:12
自己看:
http://hi.baidu.com/%B9%FE%C4%E1%E9%AA/blog/item/a3b03d1b95426dd3ac6e7508.html
热心网友
时间:2022-04-18 10:03
看了推荐的答案,确实非常好,属于非常标准的解法。
以下我提供一种另类的解法。
首先,描述问题:随机生成一个三位数,由 大写字母,小写字母,数字,下划线组成。
难点:不能采用推荐的答案里面的方法使用 CHAR() 公式内嵌Rand()或RandBetween()公式,因为在 ASCII 表里面它们对应的值是不连贯的,数字:30-39,大写字母:65-90,小写字母:97-122,下划线:95。
为了防止有人不理解,我把问题简化成:随机生成字符X,该字符在大写字母,小写字母,数字,下划线内随机选择。如果使用CHAR()公式,则括号内的数值必须在30-39,65-90,97-122,95内随机选择。使用Rand()或RandBetween()函数很难实现(我尝试使用If+RandBetween嵌套,结果要么太复杂,要么导致每个字符被选中的概率不一样)。突然我在浏览excel函数时发现了Mid()函数,就有了一个想法。以下是随机生成一个X的解法:
=MID("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",RANDBETWEEN(1,63),1)
说明:给出一个字符串,包含大写字母,小写字母,数字,下划线,使用MID()函数从这字符串里的随机位置开始,选取1个长度的字符串,从而实现了:生成一个X,X在大写字母,小写字母,数字,下划线中随机。
那么生成一个三位数,由 大写字母,小写字母,数字,下划线组成,解法:
=Concatenate(MID("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",RANDBETWEEN(1,63),1), MID("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",RANDBETWEEN(1,63),1), MID("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",RANDBETWEEN(1,63),1))
举一反三1:Mid()函数内的第一字符串参数可以包含任意你想要包含的内容而不*于我所列举的,比如!@#¥%……&*()等。
举一反三2:如果XXX的每一个X都有自己的要求,比如第一个X不允许为数字0,只需在第一个MID()函数的字符串里面删除0即可。
更多。
随机大写字母
=MID("ABCDEFGHIJKLMNOPQRSTUVWXYZ",RANDBETWEEN(1,26),1)
随机小写字母
=MID("abcdefghijklmnopqrstuvwxyz",RANDBETWEEN(1,26),1)
随机数字
=MID("0123456789",RANDBETWEEN(1,10),1)
(数字0有可能被单元格忽略,特别是以0开头的多位数,如098)
最后,希望大家给我点赞,谢谢!