|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
ljpmqb888 发表于 2015-4-20 09:19
谢谢老师这么细致的回复和指点!!我初学函数,有不懂的地方再向老师请教!!
公式含义简单介绍一下:
1、A1=RANDBETWEEN(1,9)——随机产生1~9(不含0)之间的随机数;
2、A2=LARGE(IF(A1<>ROW($1:$9),ROW($1:$9)),RANDBETWEEN(1,8))(下拉)——随机产生1~9中不等于A1(上一行)已出现的8个数中任一个数;
3、B1=LARGE(IF(COUNTIF($A1:A1,ROW($1:$10)-1),,ROW($1:$10)-1),RANDBETWEEN(1,10-MAX(COLUMN(A:A))))(右拖)——随机产生1~10中不等于$A1:A1(左面)已出现的随机数,右拖一列,左面多了一个,取数范围少一个(1~10-COLUMN(A:A))
4、F1=LARGE(IF(COUNTIF($A1:E1,ROW($1:$9)),,ROW($1:$9)),RANDBETWEEN(1,9-MAX(COLUMN(E:E))))(第六个数要求不为0)——与A1类似,产生不包括左面已有的1~9中间的随机数;
5、B2=LARGE(IF((COUNTIF($A2:A2,ROW($1:$10)-1)=0)*(B1<>ROW($1:$10)-1),ROW($1:$10)-1),RANDBETWEEN(1,9-MAX(COLUMN(A:A))+COUNTIF($A2:A2,B1)))(右拖下拉)——其中(COUNTIF($A2:A2,ROW($1:$10)-1)=0)满足条件左面已出现的不再出现,(B1<>ROW($1:$10)-1)满足上行已经出现的不再出现,9-MAX(COLUMN(A:A))除了A2和B2,余下只有8个数可选(右拖一列少一个),但是若$A2:A2中含有B1值,选择个数可以多一个,所以再+COUNTIF($A2:A2,B1);
6、F2=LARGE(IF((COUNTIF($A2:E2,ROW($1:$9))=0)*(F1<>ROW($1:$9)),ROW($1:$9)),RANDBETWEEN(1,8-MAX(COLUMN(E:E))+AND(COUNTIF(G1:$J1,$A2:E2)=0)))(下拉)——原理以上类似,改成F6=LARGE(IF((COUNTIF($A2:E2,ROW($1:$9))=0)*(F1<>ROW($1:$9)),ROW($1:$9)),RANDBETWEEN(1,3+COUNTIF(A2:E2,F1)))(下拉),更容易理解(1~9 九个数中左面5个,上面1个排除掉后只有3个可选,但是在面5个中已经包含上面一个,则可增加一个可选。7、I2=IF(COUNTIF(A2:H2,J1),LARGE(IF((COUNTIF($A2:H2,ROW($1:$10)-1)=0)*(I1<>ROW($1:$10)-1),ROW($1:$10)-1),RANDBETWEEN(1,9-MAX(COLUMN(H:H))+COUNTIF($A2:H2,I1))),J1)(下拉)——除了增加前面判断外,其余与B2相同,前面的判断是,如果左面8个数中还不包含上一行最后一列的数,则本单元格强制让它等于上一行最后一列的数。(这是为了避免随机长生的最后一个数与上一行最后一个相同,以防与规则相悖而出错)
8、J2=MAX(IF((COUNTIF($A2:I2,ROW($1:$10)-1)=0)*(J1<>ROW($1:$10)-1),ROW($1:$10)-1))(下拉)——没得选,0~9十个数中左面已产生9个,余下唯一一个。改成=MAX(IF((COUNTIF($A2:I2,ROW($1:$10)-1)=0),ROW($1:$10)-1))更简(不必再考虑与上行不同)
9、上面除了1、和8、以外,公式的主体是=LARGE(IF(条件),数值数组),RANDBETWEEN(1,最多个数))——这是随机不重复的典型结构公式,RANDBETWEEN(1,最多个数)产生一个随机整数n,在数值数组取第n大的数。随着条件的变化,将不符合条件的数值置零,并确定数值数组中最多可取个数。
下面附件,是F2和J2用上面6、和8、修改简化后的公式。
EH(Wjg)c.zip
(15.58 KB, 下载次数: 42)
|
评分
-
1
查看全部评分
-
|