2016-09-27 92 views
1

我正在寻找一种方式来找到其中RAND()数量处于非理性的名单上(有效RAND()也一样)的数字从0到1找到新号码的位置

所以我有数字列表0.1003,0.1984,0.3895,0.4506,0.4724,0.4856,0.5602,0.8542 in A1:A8

然后我有一个RAND()号码来检查列表。现在我已经试过RANK.AV(RAND(),A1:A8),但排名函数需要您的查找值在列表中。

一个简单的解决办法是把我的RAND()在列表(A9)的底部,并使用RANK.AV(A9,A1:A9),所以我的号码列入名单,不过,我想在我的阵列做这每一个数字数以千计的兰特数字,如此不切实际。

也许有一些方法可以将另一个单元格连接到一个数组上而不需要将它放在相邻的位置上?

例如,在B1一个RAND(),我可以在C1写:

=RANK.AV(B1,ARRAY.JOIN(A1:A8,B1)),但我已经尝试了一些方法(&,+)并不能达到这个阵列连接功能,所以我以为我会寻求帮助!也许需要一个宏或UDF?

+3

如果你的清单是排序的(如你的样本),那么你可以使用'Match'和最终参数'True'来获得测试值的位置 –

+0

我很确定你需要一点VBA来将新号码插入到列表中,并将其中的号码向下移动一个位置 –

+0

对可怜措辞的道歉;我实际上并不需要将RAND()值放在列表中,只是为了找到它在列表中的位置(数字)。我已经略微修改了措词 – Greedo

回答

0

对不起@克里斯,我敢肯定,这是您在您的评论的意思: -

=IF(B1<A1,1,MATCH(B1,$A$1:$A$10)+1) 

在您新的随机数是B1和A1现有的列表:A10,按升序排序。如果新的数字小于列表中的第一个条目,这将是一个特殊情况:否则,您可以通过在A1中放置一个零并将伪随机数字向下移动,从而将公式简化为

=MATCH(B1,A$1:A$10) 

enter image description here

如果你想允许联系,你可以纠正它: -

=IF(B1<A1,1,MATCH(B1,$A$1:$A$10)+1)-COUNTIF($A$1:$A$10,B1)/2 

或只是

=MATCH(B1,$A$1:$A$10)-COUNTIF($A$1:$A$10,B1)/2 

在A1中为零。 (A $ 1:A $ 10)+2或计数(A $ 1)可以很容易地改变它, :10美元)+1如果包含零。

+0

是的,汤姆,这就是我的意思。可能值得添加搜索范围需要排序的要求。 –

+0

谢谢 - 我的答案有点修饰。 –

0

这可以做你的绝招:

=RANK.AVG(INDEX(A1:A8,RANDBETWEEN(1,COUNT(A1:A8))),A1:A8) 

这也随机选择了随机数。

+0

几乎,但不完全;你的方法从列表中选择一个随机数,给予所有数字相等的权重。然而,我的名单并不是均匀分布的,因此排在两个间隔很大的数字之间的概率应该比两个数字之间的比例要高得多。这是我的目的所必需的,并且被这种方法所忽视。 – Greedo

+0

如果我找到了你,这可能是你的解决方案'= RANK.AVG(VLOOKUP(RAND(),A1:A8,1,TRUE),A1:A8)'。这基本上与它使随机数字充当列表中的数字相同。 – zipa

+0

实际上,当数字高于最大值或低于最小值时,我错过了使用正确的公式如下的情况:'= IFERROR(RANK.AVG(VLOOKUP(B1,A1:A8,1,TRUE),A1:A8),IF (B1> MAX(A1:A8),如图1所示,COUNT(A1:A8)+1))'。我希望这是你需要的一个。 – zipa