返回列表 上一主題 發帖

[發問] 請問在vba中的陣列如何排序?

[發問] 請問在vba中的陣列如何排序?

如何在VBA中的陣列去作排序的動作,(非 range, worksheet) ? 號去找 SORT 找不到, 嘗試用 Swap 指令行不通, 難到要用這樣的東西嗎?

Dim rd(5) As String
Dim tmp As string
Dim i, j As long
For i = 1 to 4
     for j = i + 1 to 5
         If rd(i) > rd(j) Then
             tmp = rd(i)
             rd(i) = rd(j)
             rd(j) = tmp
        Endif
next
嗎?
V98

回復 1# linshin1999
氣泡式排序法,在VB中最常見的排序法
但在EXCEL.VBA裡面可用到工作表函數幫忙
陣列排序 / Sorting Array / Sort Array
學海無涯_不恥下問

TOP

回復 2# Hsieh

如木工版主所言不是很懂,但是再用力去了解看看,如Hsieh所言看來VBA中没支援陣列排序,謝謝!!
V98

TOP

本帖最後由 Hsieh 於 2011-1-8 00:12 編輯

回復 3# linshin1999
你的寫法在VB環境中並無函數可利用
所以使用氣泡排序法
在EXCEL的VBA中,因為已經有工作表函數可利用所以就可善加利用
再參考這帖
請問如何將陣列中元素將其大小序號寫入第二維中?
學海無涯_不恥下問

TOP

本帖最後由 linshin1999 於 2011-1-8 00:32 編輯

回復 4# Hsieh

  常常看到版主用到 Dictionary 的用法,要再用力去學, 那麼不同項目出現次數的加總,好像 Dictionary 就是為此設計的是嗎?我會去研究它.,謝謝!!
V98

TOP

陣列中排序看過許多方法,如一樓的冒泡法,還有桶排序法,希爾排序法,選擇排序法,快速排序法等等並一而足。效率相去不遠,也有人很費心的用遞迴編寫較高效率的排序。
這些方法永遠比不上excel自帶的排序,所以把陣列寫入工作表,用內建排序指令排序好再放入新的陣列是最快的方法!

TOP

回復 6# oobird
如超級版主所言
"把陣列寫入工作表,用內建排序指令排序好再放入新的陣列是最快的方法!"
可否請您寫一段程式碼示範,讓我有多一個學習的機會
謝謝
ASUS

TOP

回復 7# asus103
  1. Sub Ex()
  2.     Dim Ar, Rng As Range
  3.     Ar = Array("SD", 100, "SA", 50, 777, "AAA", 5)
  4.     With ActiveSheet
  5.         Set Rng = .[a1].Resize(UBound(Ar) + 1)
  6.         Rng.Value = Application.Transpose(Ar)
  7.         Rng.Sort Key1:=Rng(1), Order1:=xlAscending, Header:=xlNo
  8.         Ar = Application.Transpose(Rng)
  9.     End With
  10. End Sub
複製代碼

TOP

有些資料是不適合到 工作表 去處理的,我的資料是要作設定用的,在工作表上的欄列很大,約有(2000~10000),如果有與資料檔上相同的資料要被作記號,比如字型被黑體字代替,因為資料檔有大小次序所以要排好次序以再去比對會比較快,它是背景作業不是前景作業,只能用陣列來寫不能用 Range 處理,我知道 Excell 上的 sort 功能,但是用不上. 所以看是不是有直接的方式去呼叫,没有就自己寫了,謝謝大家.
V98

TOP

回復 9# linshin1999


    txt檔排序顛倒
學海無涯_不恥下問

TOP

        靜思自在 : 君子如水,隨方就圓,無處不自在。
返回列表 上一主題