問題的形成
假設我們需要在給定的值範圍內創建一組不重複的整數隨機數。 旅途中的例子:
- 為產品或用戶生成唯一的隨機代碼
- 將人員分配給任務(從列表中隨機分配一個)
- 搜索查詢中的單詞排列 (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 數組宏函數,它從給定的間隔產生所需數量的隨機非重複數字。
- 如何統計一個範圍內唯一值的數量
- 從列表中隨機選擇元素