2016-09-27 93 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