如何在需要数组的函数内使用计算值

时间:2018-06-13 03:59:56

标签: arrays excel

有一个名为SMALL的便捷Excel函数,可以让您从数组中找到第n个最小值。例如:SMALL({35;10;5000;6},2) = 10,即集合中的第二个最小数字。

您可以通过引用单元格数组(SMALL(A1:A10,2))来使用此函数,也可以直接在公式中编写一个常量值数组(SMALL({1;2;3},2))。

有没有办法直接在公式中编写计算值数组?如果使用RAND生成值,它应该看起来像这样:

 SMALL({RAND();RAND();RAND()},2)

但Excel不允许这样做。

如何在另一个需要数组的函数(如RAND)中使用函数(如SMALL)?

是的,我知道通常的解决方案是将计算值放在各自的单元格中,然后只使用该数组作为SMALL的输入。如果我能在一个单元格中完成所有这一切,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可能知道的一般答案是您将使用array formula

这有点难以用RAND()来说明,但是如果你采用像SQRT这样的更正常的功能,那么用法就是

=SMALL(SQRT({9,4,1}),1)

所以不是向SQRT提供单个参数,而是提供一个参数列表,它将一次通过一个参数并返回一个由3个元素{3,2,1}组成的数组,并传递给SMALL评估。

如果相同的数字列表在(例如)A1:A3中,则需要使用 Ctrl Shift 输入<作为数组公式输入/ KBD>

=SMALL(SQRT(A1:A3),1)

但正如@Jeeped所指出的,使用AGGREGATE通常更方便

=AGGREGATE(15,6,SQRT(A1:A3),1)

据我所知,您无法使用RAND重现此行为,因为它是少数几个不带参数的Excel函数之一。

如果你确实想要生成一个随机数r的数组,其中0 <= r <1,你就必须做这样的事情

=SMALL((RANDBETWEEN({0,0,0},10^20-1)/10^20),1)

即。使用任意大的上限RANDBETWEEN。