返回列表 上一主題 發帖

[發問] 三維陣列找最大值

[發問] 三維陣列找最大值

一個三維陣列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, )的最大值?

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
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

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

雖不曾寫過三維陣列,但三維應該像如下表示式:
PR(1 To 3, 1 To 30, 1 To 10)

TOP

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

Image 9.jpg
2018-5-20 21:22
  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
複製代碼

TOP

回復 4# quickfixer


這寫法是我從沒嘗試過的  讓我開眼界了!
請問findmax.Sort: findmax.Reverse 是什麼意思?
感謝

TOP

回復 5# acdx


    這邊有詳細的ArrayList解說與範例(英文)
    http://www.snb-vba.eu/VBA_Arraylist_en.html#L_11.1

TOP

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

回復 5# acdx

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

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題