無重複的隨機數

問題的形成

假設我們需要在給定的值範圍內創建一組不重複的整數隨機數。 旅途中的例子:

  • 為產品或用戶生成唯一的隨機代碼
  • 將人員分配給任務(從列表中隨機分配一個)
  • 搜索查詢中的單詞排列 (hello seo-shnikam)
  • 玩樂透等

方法1.簡單

首先,讓我們考慮一個簡單的選項:我們需要從 10 到 1 隨機獲取 10 個整數。使用 Excel 中內置的函數 案例之間 (邊緣之間) 不保證唯一性。 如果您在工作表單元格中輸入它並將其複製到 10 個單元格中,則很容易發生重複:

無重複的隨機數

因此,我們將走另一條路。

所有版本的Excel都有一個功能 (響),用於排名,或者換句話說,確定一個數字在集合中的最高位置。 列表中最大的數字排名=1,排名第二的數字排名=2,依此類推。

讓我們在單元格 A2 中輸入函數 信息系統 (蘭德) 沒有參數並將公式複製到 10 個單元格。 這個函數將為我們生成一組從 10 到 0 的 1 個隨機小數:

無重複的隨機數

下一欄我們介紹函數 確定每個接收到的隨機數在排名中的位置:

無重複的隨機數

我們在 B 列中得到了我們想要的——從 1 到 10 的任意數量的非重複隨機整數。

純粹從理論上講,可能會出現一種情況 信息系統 將在 A 列中為我們提供兩個相同的隨機數,它們的等級將匹配,並且我們將在 B 列中得到重複。但是,鑑於精度為小數點後 15 位,這種情況的可能性非常小。

方法2.複雜

這種方法稍微複雜一些,但只使用了一個數組公式。 假設我們需要在一張紙上創建一個 9 到 1 範圍內的 50 個非重複隨機整數的列表。

在A2單元格輸入以下公式,最後點擊 Ctrl + Shift + Enter (將其作為數組公式輸入!)並將公式複製到所需的單元格數量:

無重複的隨機數

方法 3. 宏

當然,您可以使用 Visual Basic 編程來解決這個問題。 在一篇關於隨機抽樣的舊文章中,我已經引用了 Lotto 數組宏函數,它從給定的間隔產生所需數量的隨機非重複數字。

  • 如何統計一個範圍內唯一值的數量
  • 從列表中隨機選擇元素

發表評論