Excel:在数组中放置一个随机数的公式

这一个让我严重的难住,所以我想我会分享给你们,看看我得到:)

一般问题

我在电子表格中有以下数据 数据数组

正如你所看到的,我有两套相同的标题“猫,狗,人…”(确切的名字并不重要)

这两个分类归入“发件人”列或“收件人”行之下。 该表的大部分是0到1之间的数字的数组,或空单元格。

基本上我想要做的是find一个给定的Rand()数字在每一行的排名。 然后我从“To”行返回对应于随机数字放置位置的项目。

沿着第一个Cat行读取一个随机数(在1和0之间)被sorting。 如果是0到0.3658之间,我会返回Cat,0.7193 …和1给我Van

所以理想情况下,我将返回从To设置的标题的值,该设置垂直高于Rand()数字所在的上限。


尝试解决scheme

为了实现这个排名,我一直使用Match(value,array,0)函数(0作为我的数字是从小到大的顺序)。

我的公式的简化版本是:

=Index(To_Headings,MATCH(RAND(),From_Row,0))

To_Headings是数组E3:I3From_Row是我用另一个公式生成的数组,导致D#:I# (#是与From标题相关的行号,因此必须是4到8之间的整数)

但是,如果你特别谨慎,你可以看到这是我的解决scheme不足之处

正如我所说, 理想情况下,我想findRAND()所在的上限,因为它始终与我所需的输出To标题在同一列。 参数为0的MATCH()返回RAND()所在的下界。 通常这是所需列左侧的列1。

例如再次沿Cat行读取 – 对于0.5的随机数,它所在的边界是0.3658 …和0.7193 …。上边界直接在Dog下面,我的期望输出。 下面是所需1左边的1列,所以在我的公式中,当使用Index读取时,我简单地移回到右边

图片重复参考

但空白单元格渲染这个没用。 对于0.719 …和1之间的随机数,下界现在是上界左边的列。 在其他情况下,它可以是3或4,实际上是任何数字。 这是因为空白单元右上方的上限推上去了。


正确,铭记所有的想法,谁能告诉我如何排名兰德()号码,所以它给了我的上限? 当然,我已经尝试与-1作为参数匹配,但是,因为这需要降序,问题也翻转!

我想我可以尝试计算下限的右边是否有空格,并且偏移了INDEX ,而不是1,但是我可以看到会在代码中添加很多行,而我真的需要保持精简,因为它将运行在约10000个单元!

你可以使用这个数组公式。

由于您的数据按照升序排列,因此将会find随机数小于或等于数据集中的第一个单元格:

 =INDEX($E$3:$I$3,MATCH(TRUE,$J$2<=E4:I4,0)) 

作为一个数组公式,在退出编辑模式时,必须使用Ctrl-Shift-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}

![在这里输入图片描述

我已经通过Matchfunction的实验发现了另一个非常简单的答案。

所有你需要做的就是用左边的数字填充这些空白。 由于Match不会查找大于随机数的第一个数字,而是最后一个 ,通过填充空白,所有的调整都是为您完成的。

因此,示例图片现在成为以下内容: DataSet2

因此,例如,再次沿着Cat排读取0.719 …。 对于0.8的随机input而言,不是像以前一样在Dog列停止(因为0.8 <1,因此0.719 …是随机input的最小数),现在公式停止在Upper的左边1列每次都有约束。

现在我承认@ScottCraner给出了我的问题的完美答案,如上所述,但是一个数组公式可以只粘贴一个大小(不含VBA),而单元格公式可以自动填充一个新的范围,所以对于我的应用程序,我不能使用这个答案。 所以我想我会添加这个解决scheme作为单元格公式的方法。