Re: [VBA ] 請幫我看一下排序的code出了甚麼問題~
我後來加了大家建議的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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):