由於原提問者還有疑問
進一步說明如下
我們只要專注於一條式子就好了 I1
=RANK(LARGE($A1:$F1,COLUMN(A:A)),$A1:$G7)
這條
其他以此題來說都只是錦上添花~
先看此式
=RANK(LARGE($A1:$F1, 1 ),$A1:$G7)
與上式會算出相同結果
LARGE($A1:$F1, 1 )
這是在$A1:$F1這6個數中找第1大的數
=RANK(LARGE,$A1:$G7)
求出此數在$A1:$G7這49個數中的排名
如此一來,此RANK得到的數必定是1~49之間的整數
而且由於$A1:$G7內的rand()幾乎不會重覆
排名自然不會相同,就得到亂數取的1~49間不重覆整數
最後
COLUMN(A:A)
是讓式子往右拉時 數字會增加
1 2 3 4 5 6這樣
方便取第1 2 3 4 5 6大的數,如此排序後即可檢查1000筆中是否重覆
※ 引述《JieJuen (David)》之銘言:
: 原題: #18q-ePtR (ask)
: 49取6,亂數列出1000筆。 (無特別號)
: http://2y.drivehq.com/p/get6in49.rar
: 此題的特色是 總共的組合數13983816
: 取1000組微不足道;另一方面若要先全列出再從中取亂數1000筆,則十分辛苦。
: 不知VBA有什麼好方法? (*)
: 因此此檔算是偷懶,取1000筆再來檢查這1000筆當中有無重覆。
: 用函數取不重覆的亂數,RANK是一定要用到的啦
: 正常要列出49個亂數,取其中6個的排名,但這裡"剛好"因為7*7=49
: 所以只要每列放7個亂數,排名的範圍往下延伸,達到7列即可~
: 如此已簡單取得一筆49取6不重覆的亂數
: 但 之後要檢查是否重覆,需要排序,
: 所以取的時候加上LARGE或SMALL使其有序。
: 把數字用&接起來,檢查接起來的那一欄有無重覆即可。
: 隨意試了幾次運算,根本不會重覆到,
: 所以也不用想如何"一次到位"了 |||
: (*) 網路上大致上看到兩種層次的VBA
: 簡單型的 連一筆49取6都可能重覆 若重覆了就要換(i-1)
: 稍微厲害的 單一筆的6個數不會重覆,但似乎也沒法避免取到兩筆相同的。
: excel的rand()好用啊
: 因為位數很多
: 使用簡單型的算法可以達成稍微厲害的層次~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.32.94
※ 編輯: JieJuen 來自: 218.164.49.72 (05/11 13:50)