看板 Office 關於我們 聯絡資訊
由於原提問者還有疑問 進一步說明如下 我們只要專注於一條式子就好了 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)