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

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

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

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

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

下拉后得到以下结果

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

💡

求大神指点

四川省
浏览 864
1
5
分享
5 +1
14
1 +1
全部评论 14
 
Karlie
厉害
· 广东省
回复
 
wps新路
wps新路

WPS函数专家

没太看懂 猜一个, 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
回复
甲树
我靠,就是这样,大哥牛逼
· 四川省
回复
 
会飞的鱼
会飞的鱼

KVP函数专家、创作者俱乐部成员

=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
回复
懒得批爆
懒得批爆

创作者俱乐部成员

牛掰
· 四川省
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

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