Board logo

標題: [發問] 三維陣列找最大值 [打印本頁]

作者: acdx    時間: 2018-5-15 17:59     標題: 三維陣列找最大值

一個三維陣列PR(1 To 3, 1 To 30)
[ 5, 6, 2, 15, 11, ....]
[10, 21, 17, 5, 25, ...]
[11, 14, 8, 21, 24, ...]
該怎麼找PR(1, ), PR(2, ), PR(3, )的最大值?
作者: 准提部林    時間: 2018-5-19 20:58

Sub UTest()
Dim PR(1 To 3, 1 To 30), MX(1 To 3)
For i = 1 To 3
For j = 1 To 30
    PR(i, j) = Int(Rnd * 1000)
    If PR(i, j) > MX(i) Then MX(i) = PR(i, j)
Next
Next
MsgBox Join(MX, "_")
End Sub
作者: Kubi    時間: 2018-5-20 20:32

回復 1# acdx
底下是二維陣列:
PR(1 To 3, 1 To 30)

雖不曾寫過三維陣列,但三維應該像如下表示式:
PR(1 To 3, 1 To 30, 1 To 10)
作者: quickfixer    時間: 2018-5-20 21:23

本帖最後由 quickfixer 於 2018-5-20 21:32 編輯

[attach]28742[/attach]
  1. '自己把第7行的資料來源改成pr()2維陣列
  2. Sub test()
  3.     Dim findmax As Object, mx(1 To 3)
  4.     Set findmax = CreateObject("System.Collections.ArrayList")
  5.     For i = 1 To 3
  6.         For j = 1 To 30
  7.             findmax.Add Cells(i, j).Value
  8.         Next j
  9.         findmax.Sort: findmax.Reverse
  10.         mx(i) = findmax.Item(0)
  11.         findmax.Clear
  12.     Next i
  13.     MsgBox Join(mx, "_")
  14.     Set findmax = Nothing
  15. End Sub
複製代碼

作者: acdx    時間: 2018-5-24 14:32

回復 4# quickfixer


這寫法是我從沒嘗試過的  讓我開眼界了!
請問findmax.Sort: findmax.Reverse 是什麼意思?
感謝
作者: nolookyou    時間: 2018-5-24 15:17

回復 5# acdx


    這邊有詳細的ArrayList解說與範例(英文)
    http://www.snb-vba.eu/VBA_Arraylist_en.html#L_11.1
作者: quickfixer    時間: 2018-5-24 16:31

本帖最後由 quickfixer 於 2018-5-24 16:42 編輯

回復 5# acdx

從01 S大,那邊學來的,他常常有一些很特别的寫法出現
sort是從小到大排序
Reverse是把排序好的,改成從大到小排序
這樣item(0)就固定是最大值
資料少還沒什麼感覺,資料多時這個方式超快
其實資料不多,可以用worksheetfunction.max代替,程式比較短,速度一樣快




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