如何在Excel中创建由多个不同动态数组拼接而成的动态数组?
解决Excel LAMBDA函数生成多列独立随机排列的问题
问题原因
你用=IF(SEQUENCE(,5),RANDPERM(4))生成数组时,Excel会将RANDPERM(4)的结果广播到所有列——也就是RANDPERM(4)只执行一次,得到的单列排列被重复填充到5列中,所以所有列内容完全相同。
解决方法
要让每一列都生成独立的随机排列,需要强制Excel为每一列单独调用RANDPERM函数,推荐使用BYCOL函数实现:
=BYCOL(SEQUENCE(,5), LAMBDA(col, RANDPERM(4)))
BYCOL会遍历SEQUENCE(,5)生成的5个元素(每列对应一个元素),对每个元素执行一次RANDPERM(4),这样每一列都会得到独立计算的随机排列,最终生成4×5的目标数组。
进阶优化:修改RANDPERM支持直接生成多列
如果需要更灵活的调用方式,可以修改你的RANDPERM函数,让它直接支持指定列数,避免每次嵌套BYCOL:
=LAMBDA(n, cols, LET( ra, RANDARRAY(n, cols), sorted_ra, BYCOL(ra, LAMBDA(c, SORT(c))), BYCOL(SEQUENCE(, cols), LAMBDA(i, XMATCH(INDEX(ra,,i), INDEX(sorted_ra,,i)))) ) )
修改后直接调用=RANDPERM(4,5)就能生成4×5的多列独立随机排列数组。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

