Board logo

標題: [分享] 陣列排序方式 [打印本頁]

作者: Min    時間: 2010-5-3 20:54     標題: 陣列排序方式

Sub TOP_Value()
    '排序
    Dim TT As Variant
   
    TT = Array(5, 4, 2, 1, 2)

    '由大到小排序
    MsgBox Application.WorksheetFunction.Large(TT, 1)
    MsgBox Application.WorksheetFunction.Large(TT, 2)
    MsgBox Application.WorksheetFunction.Large(TT, 3)
    MsgBox Application.WorksheetFunction.Large(TT, 4)
    MsgBox Application.WorksheetFunction.Large(TT, 5)
   
    '由小到大排序
    MsgBox Application.WorksheetFunction.Small(TT, 1)
    MsgBox Application.WorksheetFunction.Small(TT, 2)
    MsgBox Application.WorksheetFunction.Small(TT, 3)
    MsgBox Application.WorksheetFunction.Small(TT, 4)
    MsgBox Application.WorksheetFunction.Small(TT, 5)
End Sub
作者: am0251    時間: 2010-5-4 23:25

不好意思,我才剛學VBA,對Array的用法不是太過有概念,可以教我一下嗎?
如果可以有簡易明的例子說明一下就好了,謝!
作者: PD961A    時間: 2010-5-5 19:56

回復 1# Min


    通常陣列公式
都是寫的很複雜
版主寫的很容易懂
謝謝!!
作者: Min    時間: 2010-5-5 20:16

不好意思,我才剛學VBA,對Array的用法不是太過有概念,可以教我一下嗎?
如果可以有簡易明的例子說明一下就好 ...
am0251 發表於 2010/5/4 11:25 PM


其實Array觀念不難!
就重一維陣列的型態開始說起...
以excel cells來說 一維陣列就像是只有一欄的資料型態 ex.只有A1~A65536
那cells只能用cells(1,1) cells(2,1) cells(3,1)....cells(65536,1) 所以就只有row可以用!
dim arr()
arr(0) arr(1) arr(2)....arr(65536)
但須注意的是array預設是由0開始!

二維陣列更是簡單 excel的cells本身就是二維
cells(1,1) 就如同arr(0,0)
cells(123,321) 就如同arr(123,321)

那三圍... 錯是三維啦! >"<
三維陣列就要想像是立體空間了!

會不會還有人問四維陣列阿~
四維.... 四維可以稱四度空間>"< 算了!我不知道怎麼解釋...
作者: PD961A    時間: 2010-5-5 20:56

板主
您不要這樣....
這樣
我們要向您學習的人也會慌了手腳喔!!
如果您覺得不知道要如何解釋的讓我們這些初學者易懂
不訪您先在筆記本上先寫好您要告訴我們這些初學者的東西
淺顯易懂
是我們需要的...但是也是您版主辛苦得地方...知易行難!!!
感謝您!!!!無私奉獻!
作者: Hsieh    時間: 2010-5-6 13:08

本帖最後由 Hsieh 於 2010-5-7 21:54 編輯

回復 5# PD961A


    淺顯易懂的文字敘述?
那各位版主就先來去修語文課程
把語言精煉後再來發文
開開玩笑啦!
陣列:
相信對一維陣列的話大家比較容易接受
就一堆資料規則的放入一排內就是一維陣列
以實物舉例
大家有上過學,學校有朝會或任何全校到操場集合的經驗吧!
當要各班整隊時
班長說排頭伍為準
這一伍的成員就是一維陣列的元素
我們把這排頭底下要對齊他的這些人
就是二維陣列的第二維的元素了
再把集合好的班級(二維陣列)
帶到操場時
操場上會分年級站好
每一個年級就會有好多班
這一個年級就是多個二維陣列的集合(三維陣列)
每個學校會有多個年級
那集合這麼多年級(三維陣列)就成了四維陣列
這樣對陣列的解釋不知是否比較實體化
比較容易了解呢?
  1. Sub nn()
  2. Dim Ar(3, 10, 10, 4) '定義Ar為4維陣列:每隊4排,每排10人,每年級有10班,共有3個年級(年級,班,人,排)
  3. k = 42048
  4. mystr = Chr(k)
  5. For y = 0 To 2
  6.    For x = 0 To 9
  7.        For i = 0 To 3
  8.          For j = 0 To 9
  9.          Do Until mystr <> "?"
  10.          k = k + 1
  11.          mystr = Chr(k)
  12.          Loop
  13.               Ar(y, x, j, i) = Chr(k): k = k + 1: mystr = Chr(k): Next: Next: Next: Next
  14. For y = 0 To 2
  15.    For x = 0 To 9
  16.        For i = 0 To 3
  17.          For j = 0 To 9
  18.              Cells(r + 1, 1) = y + 1 & "年" & x + 1 & "班第" & i + 1 & "排第" & j + 1 & "位同學姓:": _
  19.              Cells(r + 1, 2) = Ar(y, x, j, i): r = r + 1: _
  20.              Next: Next: Next: Next
  21. End Sub
複製代碼

作者: GBKEE    時間: 2010-5-6 17:54

回復 4# Min
就重一維陣列的型態開始說起...
以excel cells來說 一維陣列就像是只有一欄的資料型態 ex.只有A1~A65536

如果:A = [A1:A65536]   整欄
A是(1  To 65536 ,  1) 的二維陣列   
如果:A = [A1:IV1]         整列
A是(1 , 1 To 256 ) 的二維陣列
作者: PD961A    時間: 2010-5-6 18:54

回復 6# Hsieh

板主您的淺顯易懂表達方式..在寫到3維及4維後..反而讓人不知所云..
   
閔板主敘述就一維陣列的型態
dim arr()
arr(0) arr(1) arr(2)....arr(65536)
但須注意的是array預設是由0開始!

二維陣列更是簡單 excel的cells本身就是二維
cells(1,1) 就如同arr(0,0)
cells(123,321) 就如同arr(123,321)的回答
和gbkee版主所說的都一樣...
所以應該是階級還不到寫出3維或4維的陣列
因此沒辦法想像
還是謝謝您!
作者: Hsieh    時間: 2010-5-6 19:19

回復 8# PD961A


    我所說的是多維陣列的概念大致就像排隊集合一樣
只是當你在寫成陣列與法時是用他的INDEX表示
如Dim Ar(0 to 10,0 to 20,0 to 10,0 to 30)
這樣就宣告了一個4維陣列
只訂出這陣列中第一個元素就寫成
Ar(0,0,0,0)
最後一個元素就是Ar(10,20,10,30)
第一維有11個元素
第二維有21個元素
第三維有11個元素
第四維有11個元素

Sub nn()
Dim Ar(11, 21, 11, 31)
For i = 0 To 10
   For j = 0 To 20
      For x = 0 To 10
         For y = 0 To 30
              Ar(i, j, x, y) = i + j + x + y: Next: Next: Next: Next
For i = 0 To 10
   For j = 0 To 20
      For x = 0 To 10
         For y = 0 To 30
              MsgBox "Ar(" & i & "," & j & "," & x & "," & y & ")=" & i & "+" & j & "+" & x & "+" & y & "=" & Ar(i, j, x, y): Next: Next: Next: Next
              
End Sub
作者: PD961A    時間: 2010-5-6 20:21

回復 9# Hsieh


    板主
您真的很用心很認真
其實當您寫到3/4維陣列時當下的表示方式真的是一頭霧水...
不過當您花時間在回覆這封主題時
所寫出來的陣列就相當請楚了
只是當時想說不知您可以寫成這樣的方式嗎?
結果
看到回帖
正是想要表達的意思
謝謝!!
作者: Min    時間: 2010-5-6 21:24

呵呵呵~ 真的要像Hsieh兄所說 要去修語文課程了~
GBKEE兄 有提到! 陣列的範圍是可以指定的!
就由簡單的一維陣列來舉例
一般而言 dim arr() 這樣的寫法 是指沒有範圍及型態限制 但範圍是由預設的0開始
那如果是寫dim arr(50 to 100) as string 這樣的寫法 是指範圍由50開始算起 直到100 資料型態限制為文字型態

也許會有朋友認為 那是不是直接寫dim arr()這樣就好...
但我個人認為 初學過程 要越嚴緊越好! 因為越寬鬆 越有出錯機會(我指的出錯是流程出錯 並非語法出錯~)
作者: PD961A    時間: 2010-5-7 07:56

回復 11# Min


    感謝各位版主的用心
只是當新手們在拜讀板主們的帖子時
每位板主的文字敘述
都會有不同的解讀或是想像空間
承如閔版主最後一句話..就真的是我們初學者需要很注意的地方..
至於HS版主則是以中/高級階層有了解邏輯觀念的人去闡述的..
謝謝版主們的回覆
作者: ryu0417    時間: 2010-12-16 16:52

雖然版主跟前輩們解釋了很多 也很精細
但是還是一頭霧水~ 看來要多練練才行...
作者: am0251    時間: 2011-6-19 17:01

非常感謝各位前輩們的細心解釋,總算有個概念,不過真的要熟練的話,可惜還要花很多時間;不過,還可以介紹一下有什麼的情況會最多用到陣列的例子呢?我有在別的網站爬過一下,是否有大量同一種類的資料運算時用呢?謝謝!!




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