作者yauhh (喲)
看板Visual_Basic
標題Re: [VBA ] VBA 如何陣列排序??
時間Wed Feb 29 21:46:35 2012
※ 引述《evantw (安安小成)》之銘言:
: Private Type AocOut
: OEM As String
: Su_NO As String
: In_Pcs As Long
: Ck_Pcs As Long
: Out_Pcs As Long
: End Type
: 如何將陣列中依序 Su_No 及 In_Pcs 來做從小排序到大呢??
二個層次的排序就是先用第一個排列,在符合第一個排列次序前提下要用第二個排列.
氣泡排序法最中間會看到一段碼長這樣:
If a(i) < a(j) Then Call Swap(a, i, j)
而快速排序法靠外面也會看到一段類似的碼
If a(i) < a(j) Then
leftPart.add a(i)
Else
rightPart.add a(i)
End If
現在 a(i) < a(j) 這種比較式要改成抽象的 before(a(i), a(j)),
然後就可以自己定義什麼叫作before. before的定義應該是:
Function before(a As AocOut, b As AocOut) As Boolean
If a.Su_NO < b.Su_NO Then
before = True
ElseIf a.Su_NO = b.Su_NO and a.In_Pcs < b.In_Pcs then
before = True
Else
before = False
End If
End Function
然後你可能會在參數部份遇到障礙,說UDF無法和variant互轉之類的錯誤.
此時只要把Type AocOut改成class module即可.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.66.119
※ 編輯: yauhh 來自: 61.231.66.119 (02/29 21:50)
→ yauhh:哦哦,我看錯了,以為是寫VB6. VBA則不會有class module可用. 02/29 22:29
推 evantw:我所遇到的就是您最後一行所寫的variant互轉的錯誤情況, 03/02 00:19
→ evantw:但是我不知道要如何將錯誤排除 >.< 03/02 00:20
→ yauhh:如果VBA也可以寫Class,就把AocOut Type改成Class即可解決. 03/02 00:39