iT邦幫忙

1

用EXCEL排班(2)

請問下列這行程式我應該要如何讓他亂數選取卻不重複

Range("C4", "C8").Value = "=INDEX($A$16:$A$20,INT(5*RAND()+1))"

A16至A20欄位為設定的中文字,比方說陳、李、張、黃、何←五個中文字,我要把它亂數排列,但不重複

再次感謝各位能人大德的回答!

2 個回答

2
海綿寶寶
iT邦超人 1 級 ‧ 2018-02-06 17:28:23
最佳解答

好比5張撲克牌
你可以「亂數」抽牌, 32451, 23154, 12453...
或是用下面的做法
先把牌洗亂
然後只要照順序抽 12345 即可

Sub Macro1()
   '=============================
   ' 1 of 2 先弄亂
   '=============================
   For nI = 1 To 10
      nR = Int(5 * Rnd)
      cellA = Range("$A$16").Offset(0, 0).Value '記錄第一列
      Range("$A$16").Offset(0, 0).Value = Range("$A$16").Offset(nR, 0).Value '第n列存到第一列
      Range("$A$16").Offset(nR, 0).Value = cellA '將原本的第一列存到第n列
   Next nI
   '=============================
   ' 2 of 2 直接照順序取值即可
   '=============================
   Range("C4", "C8").Value = Range("$A$16", "$A$20").Value
End Sub
蟹老闆 iT邦大師 1 級 ‧ 2018-02-07 13:25:37 檢舉

正解啦,用函數不可行,那個亂數值隨時會變動,除非當下列出,不然每次開檔都不同

kater iT邦新手 5 級 ‧ 2018-02-11 03:38:36 檢舉

謝謝海棉寶寶跟蟹老闆的回答,非常清楚,就算直接複製貼上也可以使用,實在感激!
再另外問個小問題,如圖中或是前一個問題裡面,有些字串猶如新手(我)想要學習,有推薦用書或是上網哪裡可以查詢的到嗎???
比方說"offset"、"ActiveCell"、"Select".....等等!
單字意思我都懂,就是不知道何時該使用哪一個??
再次感謝幫忙

我沒有看過 VBA 的書所以沒無法推薦
碰到問題時
上網 Google 就夠飽了

1
richardsuma
iT邦大師 3 級 ‧ 2018-02-05 22:53:24

試試 GOOGLE 下列字串:
EXCEL 亂數選取卻不重複

kater iT邦新手 5 級 ‧ 2018-02-06 05:25:55 檢舉

謝謝richardsuma提示,之前上網查過但大多都是用Rank函數來做,或是程式長到已經超過我自我學習的範圍了https://dotblogs.com.tw/yc421206/archive/2008/12/20/6471.aspx
看到一半就看不懂了,數字的亂數選取ok,我也試做過,最簡單的RAND(),然後RANK(儲存格位置),但是文字的部分他都會顯示"格式錯誤"。最後是參考了https://free.com.tw/how-to-get-random-sample-in-office-excel/
↑這個網站的公式才解決文字的部分,但是會重複
http://www.blueshop.com.tw/board/FUM20060608180224R4M/BRD200704231220396DY.html
↑這個網站寫得很淺顯易懂,解釋的也很清楚,我試做過(賓果遊戲),但內容換成文字的時候就出錯

Luke iT邦新手 3 級 ‧ 2018-02-06 11:08:18 檢舉

https://ithelp.ithome.com.tw/upload/images/20180206/200967812vZrxTTfyb.png

最後I的程式,都併再一起

kater iT邦新手 5 級 ‧ 2018-02-11 03:32:58 檢舉

https://ithelp.ithome.com.tw/upload/images/20180211/20108594N05BWWoYkL.jpg

以上是我試作的亂數選取,謝謝twluke的圖文教學

我要發表回答

立即登入回答