随机产生数字和大小写字母,你会吗?
下图就是用函数公式随机产生的数字和大小写字母,按F9结果会随机变化。既然是随机产生,肯定要用到随机函数rand或randbetween。对于这个问题,我这里给出4种方法。
第1种:large+randbetween+二维数组
下面说下这个公式的思路,我们知道0-9,A-Z,a-z一共是62个字符,对应的code码分别是48-57,65-90,97-122。
ROW($1:$26)+{31,64,96}返回的结果如下图所示,是一个26行3列的二维数组。第1列是32到57,第2列是65到90,第3列是97到122。
其中后面两列符合A-Z和a-z的code码范围,第一列只需要48到57,32到47是多余的。
LARGE(ROW($1:$26)+{31,64,96},RANDBETWEEN(1,62))这部分用large从上面的二维数组中随机取第k个最大值,k的范围在1到62之间。
第2种:small+rand+二维数组
这个公式和第1种方法的思路是一样的,只是取数的方式有所不同,由large改为small。
首先将得到的二维数组变成负数,这样最大值就变为最小值,然后用small取1到62之间随机的第k个最小值,将得到的结果添加负号变为原来的正数,最后用char转为对应的字符。
这里值得注意的是,当large和small的第2参数是小数时,它们是有区别的。
large的第2参数是小数时,向上舍入,比如large({1,2,3},2.1)=large({1,2,3},3);而small是向下舍入,比如small({1,2,3},2.9}=small({1,2,3},2}。
公式为=CHAR(INDEX(ROW($48:$109)+ROUND(INT(ROW($16:$77)/26)*6.5,),RAND()*62+1)),按三键结束,向右向下填充。
这个公式首先得到48-57,65-90,97-122这62个数字的组合,然后从中随机取出1个。
ROW($48:$109)返回的结果下图K列所示,是从48到109的62个连续自然数,由于数字太多只能用下图省略的方式来表示。
第4种:text+常量数组
公式为=CHAR(SUM(24+TEXT(RAND()*62,{"[<10]!0;[<36]7;13","@"}))),不用三键,直接向右向下填充。
将原始公式化简一下,把text中的48提取出来,得到了最开始的公式。
text果然是百变之王,用法太多了,总能带给人惊喜。你怎么看?
https://pan.baidu.com/s/1LrNko5gcU8zFQ25lG2dzaw