本帖最后由 gxl19870625 于 2015-11-28 21:27 编辑
我的答案是:
=LOOKUP(INDEX(--RIGHT(LARGE(RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77),ROW(1:77)),2),COLUMN()+11*ROW()-16),MMULT(N(ROW(1:4)>=COLUMN(A:D)),IF(B1:B4="量",1,B1:B4)),A2:A5)字符数165
公式为区域数组公式,输入方法如下:选中区域F1:P7,输入上述公式,再同时按ctrl+shift+enter;
公式解读:
公式整体为lookup,其3个参数分别为:
①INDEX(--RIGHT(LARGE(RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77),ROW(1:77)),2),COLUMN()+11*ROW()-16)
②MMULT(N(ROW(1:4)>=COLUMN(A:D)),IF(B1:B4="数量",1,B1:B4))
③A2:A5
对于①,利用RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77)生成随机等概率分布的77个自然数,再利用LARGE(RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77),ROW(1:77))对这77个数进行从大到小的排序,再利用--RIGHT(LARGE(RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77),ROW(1:77)),2)截取最右两位并转为数值即可以得到由1-77组成的随机等概率分布的77个自然数序列,最后利用INDEX(--RIGHT(LARGE(RANDBETWEEN(ROW(1:77)^0,77)/1%+ROW(1:77),ROW(1:77)),2),COLUMN()+11*ROW()-16)取出每个数值;
对于②是形成由1;B2;B3;B4组成的累加数组,即1;1+B2;1+B2+B3;1+B2+B3+B4;
对于③就是①的某一个数值根据②的累加数组去匹配,返回结果为A2:A5中对应的结果,数值在[1,B2]中的结果为为A2,数值在[1+B2,B2+B3]中的结果为A3,数值在[1+B2+B3,B2+B3+B4]中的结果为A4,数值在[1+B2+B3+B4,77]中的结果为A5,A5为0,为了显示的效果自定义公式区域F1:P70数据格式为0;0;
附加题:
在单元格B2输入下列公式:
=CHOOSE(ROW()-1,RANDBETWEEN(5,20),RANDBETWEEN(5,RANDBETWEEN(5,25-B$2)),30-B$2-B$3)
下拉至B4即可, 字符数81. |