求更简便的操作方法,以下是我自己摸索的繁琐的做法

需求是在一个单元格内生成10个1~5的随机数,合格率保持在0.8到1之间,不能全百分百合格。并在另一单元格生成合格率。

首先用randbetween(1,5)生成8个随机数,再用randbetween(4,7)生成2个随机数,再用rand()和sortby()进行乱序排序。

然后用textjion()把数字用逗号连接起来,,用countif()得出不合格数量,再得到合格率

最麻烦得地方在于,随机数批量复制后,没办法在textjoin()这一行直接下拉得到随机数字。

下拉后得到以下结果

如果这时候插入torow(),把随机数改成挨着得一行接一行再进行下拉,textjoin()可行,但实际上没用意义

💡

求大神指点

四川省
浏览 2995
1
5
分享
5 +1
15
1 +1
全部评论 15
 
欠你一辈子,你想吗
看不懂
   广西
举报
0
0
 
Karlie
厉害
   广东省
举报
0
0
 
拾光漫行
没太看懂 猜一个, A列:=TEXTJOIN(",",,SORTBY(CHOOSEROWS(VSTACK(RANDARRAY(10,1,1,5,1),RANDARRAY(2,1,6,9,1)),RANDBETWEEN(0,2)+ROW($1:$10)),RANDARRAY(10))) B列:=(10-SUM(--(--TEXTSPLIT(A2,",")>5)))/10
   重庆
举报
2
3
甲树
我靠,就是这样,大哥牛逼
· 四川省
举报
0
0
 
会飞的鱼
会飞的鱼 WPS资深用户KVPWPS函数专家Lv.1 新人创作者

Lv.1 新人创作者

=LAMBDA(s,w,m,n,b,c,LET(nn,ROUNDUP(m*(RANDBETWEEN(n,100)/100),0),mm,m-nn,ar,RANDARRAY(nn,,s,w,1),br,INDEX(IF(AND(b>0,c>0),VSTACK(RANDARRAY(mm,,s-b,s-1,1),RANDARRAY(mm,,w+1,w+c,1)),IF(b>0,RANDARRAY(mm*2,,s-b,s-1,1),RANDARRAY(mm*2,,w+1,w+c,1))),RANDARRAY(mm,,1,mm*2)),cr,TEXTJOIN(",",1,IF(mm,SORTBY(VSTACK(ar,br),RANDARRAY(m),1),ar)),cr))(1,5,10,80,0,2) 6个参数的作用依次是 1、随机最小值 2、随机最大值 3、生成数量 4、最低合格率 5、不合格值向最小值偏差值 6、不合格值向最大值偏差值
   辽宁省
举报
4
4
懒得批爆
懒得批爆WPS资深用户WPS产品体验官WPS寻令官Lv.2 潜力创作者

Lv.2潜力创作者

牛掰
· 四川省
举报
0
0
 
懒得批爆
懒得批爆 WPS资深用户WPS产品体验官WPS寻令官Lv.2 潜力创作者

Lv.2潜力创作者

把 G3# 改成 $G$3#
   四川省
举报
1
2
甲树
这样就全变成一样的了
· 四川省
举报
0
0
 
甲树
最后一步只能手动改,实在太麻烦了
   四川省
举报
0
0