Re: [VBA ] 請幫我看一下排序的code出了甚麼問題~

看板Visual_Basic作者 (穎)時間16年前 (2008/06/21 03:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
我後來加了大家建議的Redim a(50) 雖然偵錯時沒問題 可是執行巨集時"亂數"跟"氣泡排序"都沒反應 請問是為甚麼呢? 我把後來的式子放在下面 Option Explicit Option Base 1 Dim i As Integer Dim a() As Integer Sub MakeArr() ReDim a(50) For i = 1 To 50 a(i) = Int(Rnd * 49 + 1) Next i End Sub Sub BubblingSort() Dim j As Integer Dim Temp As Integer ReDim a(50) For i = 1 To 49 For j = i + 1 To 50 If a(i) > a(j) Then Temp = a(j) a(j) = a(i) a(i) = Temp End If Next j Next i End Sub PS: 我上面的亂數巨集如果成功執行的話,是會產生不重複的數字嗎? 我不大確定要怎麼讓亂數出現的數字不重複,有人知道嗎?? 我要的是1~50的亂數 ※ 引述《shirley82025 (穎)》之銘言: : 因為我才剛開始學寫VBA,所以很多東西都不是很懂 : 所以這些code都是我從網路找再自己改的, : 我是想做排序 先寫一個可以產生50個一直列亂數的code : 然後用氣泡排序法做排序 : 可是我要執行的時候一直跑出陣列索引超出範圍 : 請大家幫我看一下下面的式子到底哪裡出了問題 : Option Explicit : Dim i As Integer : Dim a() As Integer : Sub MakeArr() : For i = 1 To 50 : a(i) = Int(Rnd * 49 + 1) : Next i : End Sub : Sub BubblingSort() : Dim j As Integer : Dim TEMP As Integer : For i = 1 To 49 : For j = i + 1 To 50 : If a(i) > a(j) Then : TEMP = a(j) : a(j) = a(i) : a(i) = TEMP : End If : Next j : Next i : End Sub : -->出問題的是a(i) = Int(Rnd * 49 + 1) 跟If a(i) > a(j) Then這兩行 : 請問我要怎麼改才不會說我超出範圍呢? 先謝謝大家幫忙~ : PS: 如果我只是要有一直列的亂數排序 : 我自己打數字 然後再用上面氣泡排序的式子 : 這樣可以嗎?? 還是有別的方法去排序呢? : (我知道有快速排序法 可是那個我不知道要怎麼改成我要的樣子....) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.219.124
文章代碼(AID): #18M_x_ao (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #18M_x_ao (Visual_Basic)