Board logo

標題: [發問] 請問在vba中的陣列如何排序? [打印本頁]

作者: linshin1999    時間: 2011-1-7 23:29     標題: 請問在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
嗎?

作者: Hsieh    時間: 2011-1-7 23:45

回復 1# linshin1999
氣泡式排序法,在VB中最常見的排序法
但在EXCEL.VBA裡面可用到工作表函數幫忙
陣列排序 / Sorting Array / Sort Array
作者: linshin1999    時間: 2011-1-7 23:59

回復 2# Hsieh

如木工版主所言不是很懂,但是再用力去了解看看,如Hsieh所言看來VBA中没支援陣列排序,謝謝!!
作者: Hsieh    時間: 2011-1-8 00:08

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

回復 3# linshin1999
你的寫法在VB環境中並無函數可利用
所以使用氣泡排序法
在EXCEL的VBA中,因為已經有工作表函數可利用所以就可善加利用
再參考這帖
請問如何將陣列中元素將其大小序號寫入第二維中?
作者: linshin1999    時間: 2011-1-8 00:24

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

回復 4# Hsieh

  常常看到版主用到 Dictionary 的用法,要再用力去學, 那麼不同項目出現次數的加總,好像 Dictionary 就是為此設計的是嗎?我會去研究它.,謝謝!!
作者: oobird    時間: 2011-1-9 15:37

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

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

回復 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
複製代碼

作者: linshin1999    時間: 2011-1-9 22:21

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

回復 9# linshin1999


    txt檔排序顛倒
作者: linshin1999    時間: 2011-1-9 23:09

回復 10# Hsieh

版主 好像没有問題可以難倒你的,我會實際去測一下 徫婕 版主所示範的 Sort 指令 謝謝 !! 人老了所以我喜歡將字放大一點
作者: linshin1999    時間: 2011-1-9 23:25

回復 8# GBKEE


  版主你好,我想將你的程式存起來,你的程式方塊的下方有一個  複製代碼  點下去以後,會存到剪貼簿去.   請問剪貼簿是在那裡?
作者: asus103    時間: 2011-1-10 07:49

回復 8# GBKEE
感謝您版主大大
這對我們初學者是很好的觀摩、學習機會
作者: asus103    時間: 2011-1-10 07:54

回復 12# linshin1999

對不起、班門弄斧了
剪貼簿是系統存放暫時複製資料的地方
您只要開個記事本或WORD之類的文書處理軟體
再按貼上就可以了
作者: linshin1999    時間: 2011-1-10 09:16

回復 14# asus103


  可以了,我以為會跑到某個地方存起來,很多東西都還摸索所以連這種問題都要問,謝謝!!.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)