标题：随机函数
生成随机数字
(1)生成随机数比较简单，=rand()即可生成0-RAND_MAX之间的随机数；(#define RAND_MAX 0x7fffu)
(2)如果要是整数，就用=int(rand()%10)，表示0至9的整数，以此类推；
(3)如果要生成a与b之间的随机实数，就用=rand()%(b-a)+a，就能产生固定位数的整数了，以此类推；
注意：如果要使用函数rand()生成一随机数，并且使之不随单元格计算而改变，可以在编辑栏中输入“=rand()”，保持编辑状态，然后按F9，将公式永久性地改为随机数。不过，这样只能一个一个的永久性更改，如果数字比较多，也可以全部选择之后，另外选择一个合适的位置粘贴，粘贴的方法是点击右键，选择“选择性粘贴”，然后选择“数值”，即可将之前复制的随机数公式产生的数值（而不是公式）复制下来。
产生随机字母
随机小写字母：=CHAR(INT(RAND()*26)+97)
随机大写字母：=CHAR(INT(RAND()*26)+65)
随机大小写混合字母：=CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))
产生随机六位数的字母和数字
=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)))))
随机不重复数字序列的生成方法一
有些情形下，我们需要生成一个不重复的随机序列。
比如：我们要模拟洗牌，将一副扑克牌去掉大小怪后剩下的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)
随机不重复数字序列的生成方法二
在A1中输入公式=rand()*100000，表示随机数乘以一个比较大的数，然后往下填充N个单元格。在B1中输入排序公式=rank(A1,A:A)，双击填充，或往下填充N个单元格，B1到BN就是你所需要的N个不同随机数了解释#include <stdlib.h>
rand()
srand()
标准C库中函数rand（）可以生成0~RAND_MAX之间的一个随机数，其中RAND_MAX 是stdlib.h 中定义的一个整数，它与系统有关。
rand（）函数没有输入参数，直接通过表达式rand（）来引用；例如可以用下面的语句来打印两个随机数：
printf("Random numbers are: %i %i\n",rand(),rand());
因为rand（）函数是按指定的顺序来产生整数，因此每次执行上面的语句都打印相同的两个值，所以说C语言的随机并不是真正意义上的随机。
为了使程序在每次执行时都能生成一个新序列的随机值，我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。例程文件名： rand_srand.c
/* This program generates and prints ten random integers between 1 and RAND_MAX*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int seed; /*申明初始化器的种子，注意是usigned int 型的*/
int k;
printf("Enter a positive integer seed value: \n");
scanf("%u",&seed);
srand(seed);
printf("Random Numbers are:\n");
for(k = 1; k <= 10; k++)
{
printf("%i",rand());
printf("\n");
}
return 0;
}
当提供的种子相同时，随机数序列也时相同的。而且当种子为1时，与不使用srand()函数时一样的，也就是说rand()函数默认情况下初始化种子值为1；
在stdlib.h 中这两个函数的原型是：
int rand();
void srand (unsigned int);
srand(time(0)); i=rand(); 这样i就是一个真正意义上的随机数。原因rand()产生伪随机数，srand函数提供种子，种子不同产生的随机数序列也不同，所以通常先调用srand函数 time(0)返回的是系统的时间（从1970.1.1午夜算起），单位：秒，种子不同当然产生的随机数相同几率就很小了。[1-2]