返回列表 上一主題 發帖

[發問] excel vba 20個數字分組成4組(隨機)

麻煩各位大大幫我解題(我還是初學者 T^T)
就是有1~20個數字,想隨機分組成4組
可請大大們提供您的撰寫方式 ...
tray1203 發表於 2014-12-4 12:30
  1. Sub nn()
  2.   Dim iI%, iJ%, iMax%, iGet% ' 定義整數
  3.   Dim sStr$ ' 字串
  4.   Dim vA(), vT() ' 陣列
  5.   
  6.   Randomize (Rnd) ' 初始化亂數
  7.   vA = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) ' 宣告陣列包含每個數字 (1~20)
  8.   ReDim vT(4, 0) ' 設定標的陣列的初始大小
  9.   iMax = 20 ' 20 個數字
  10.   Do While iMax > 0 ' Do 迴圈開始,當計數值大於0則繼續執行迴圈
  11.     For iI = 0 To 4 ' For 迴圈開始,每組5個數字(0 ~ 4, 共4組)
  12.       iGet = Int((iMax - iI - 1 + 1) * Rnd + 1) ' 抓取下個數字
  13.       vT(iI, UBound(vT, 2)) = vA(iGet - 1) ' 存到標的陣列
  14.       For iJ = iGet To iMax - iI - 1
  15.         vA(iJ - 1) = vA(iJ) '  將該數字之後的元素依序填補上來
  16.       Next
  17.       If UBound(vA) > 0 Then f ' If 條件式開始(若尚未到最後一個數字)
  18.         ReDim Preserve vA(UBound(vA) - 1) ' 則陣列元素數量減 1
  19.       Else ' 否則
  20.         Erase vA ' 清除該陣列
  21.       End If ' If 條件式結束
  22.     Next  ' For 迴圈結束
  23.     If UBound(vT, 2) < 3 Then ReDim Preserve vT(4, UBound(vT, 2) + 1) ' 若尚未處理完成, 標的陣列新增存放下1組5 (0 ~ 4)個數字的空間
  24.     iMax = iMax - 5 ' 計數值減去1組的數量 (5)
  25.   Loop ' Do 迴圈結束
  26.   
  27.   sStr = "" ' 底下將各元素依序放入 sStr 變數內, 以便後續顯示隨機分組結果用
  28.   For iMax = 0 To 3 ' 4組設字
  29.     For iI = 0 To 4 ' 每組5個數字
  30.       If sStr <> "" Then
  31.         sStr = sStr & ", " & vT(iI, iMax) ' 非首次添加數字, 前面加上 , 做為數字的區隔
  32.       Else
  33.         sStr = vT(iI, iMax) ' 首次添加數字, 前面不加 ,
  34.       End If
  35.     Next
  36.     sStr = sStr & Chr(10) ' 1組數字添加完成, 加上換行字元
  37.   Next
  38.   MsgBox sStr
  39. End Sub
複製代碼

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題