Board logo

標題: [發問] 多維矩陣內擇取其中一維的陣列資料元素 [打印本頁]

作者: Scott090    時間: 2014-4-28 20:57     標題: 多維矩陣內擇取其中一維的陣列資料元素

本帖最後由 Scott090 於 2014-4-28 20:58 編輯

請問高手先進:
由於矩陣內數據多,不想用迴圈的方式來取得一個個的元素;請問有何法可解?
以下為虛擬 VBA 程序:
  1. Sub qq()
  2. '複數個一維矩陣組成陣列 aa
  3. '===========================
  4. aa = Array(Array(123, 234, 345), Array("aaa", "bbb", "ccc"), Array(567, 678, 789))

  5. '從矩陣 aa 取得 矩陣 bb
  6. '========================
  7. bb = aa(1)

  8. '把矩陣 aa 轉換成 實際的 3x3 矩陣
  9. '=================================
  10. cc = Application.Transpose(Application.Transpose(aa))

  11. '如何不用迴圈的方式把 cc 矩陣中的 cc(2,1), cc(2,2), cc(2,3) 轉入 dd()
  12. '====================================================================

  13. dd = cc((2))   '這個是不對的,純屬示意


  14. End Sub
複製代碼

作者: GBKEE    時間: 2014-4-29 07:21

回復 1# Scott090
Transpose 後陣列索引值下限從1 開始.
  1. dd = Application.Index(cc, 2)  
複製代碼

作者: Scott090    時間: 2014-4-29 12:12

回復 2# GBKEE


    非常感恩大師的解惑
作者: stillfish00    時間: 2014-5-22 17:10

回復 3# Scott090 GBKEE
分享一下個人經驗,陣列小的話,application.index很方便
但是大一點的陣列,這個函數的效率就很差(越大越明顯),
如果是重視執行時間的情況下,就盡量還是用迴圈去取會快很多。
  1. Sub testForIndex()
  2.   Dim ar2d(1 To 200, 1 To 500)
  3.   Dim test1, test2
  4.   Dim i As Long, j As Long
  5.   Dim t
  6.   
  7.   t = Timer
  8.   ReDim test1(1 To UBound(ar2d, 2))
  9.   For i = 1 To UBound(ar2d) '等於跑兩百次
  10.     For j = 1 To UBound(ar2d, 2)
  11.       test1(j) = ar2d(i, j)
  12.     Next
  13.   Next
  14.   Debug.Print Timer - t   '約0.027343秒
  15.   
  16.   t = Timer
  17.   For i = 1 To UBound(ar2d) '等於跑兩百次
  18.     test2 = Application.index(ar2d, i)
  19.   Next
  20.   Debug.Print Timer - t   '約3.867188秒
  21. End Sub
複製代碼

作者: Scott090    時間: 2014-5-22 22:43

回復 4# stillfish00


    謝謝分享




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