Board logo

標題: 矩陣合併 [打印本頁]

作者: acdx    時間: 2012-12-28 16:45     標題: 矩陣合併

我有數個矩陣
Ex:
HdB(12,1)
MdB(12,1)...共有8個 該如何將他們組合成一個12*8的矩陣?
新矩陣A(12,8)
作者: stillfish00    時間: 2013-1-2 16:25

本帖最後由 stillfish00 於 2013-1-2 16:27 編輯

回復 1# acdx
好像沒什麼簡便方法 , 假設你的array下限都為1
1.直接提取元素
  1. Dim ar, i
  2. ReDim ar(1 To 12, 1 To 8)
  3. For i = 1 To 12
  4.     ar(i, 1) = HdB(i, 1)
  5.     ar(i, 2) = MdB(i, 1)
  6.     'ar(i, 3) = ....
  7.     '....
  8.     'ar(i, 8) = ....
  9. Next i
複製代碼
2.利用工作表(感覺挺浪費)
  1. Dim ar
  2. With Workbooks.Add
  3.     With .Sheets(1)
  4.         .[A1].Resize(12) = HdB
  5.         .[A1].Resize(12).Offset(, 1) = MdB
  6.         '.[A1].Resize(12).Offset(, 2) = ...
  7.         '...
  8.         '.[A1].Resize(12).Offset(, 7) = ...
  9.         ar = .[A1].Resize(12, 8)
  10.     End With
  11.     .Close savechanges:=False
  12. End With
複製代碼
3. 改用Evaluate/Join (陣列元素不含逗號或分號字元時才可用)
  1. Dim ar
  2. ar = Application.Transpose(Evaluate("{" & _
  3.          Join(Application.Transpose(HdB), ",") & ";" & _
  4.          Join(Application.Transpose(MdB), ",") & _
  5.          "}"))
複製代碼

作者: Hsieh    時間: 2013-1-3 00:30

回復 1# acdx
以四陣列為例
  1. Sub ex()
  2. Dim AHW(12), BHW(12), CHW(12), DHW(12), TAry, MyAry()
  3. For i = 0 To 11  '寫入4個一維陣列的值
  4.   AHW(i) = Int((100 * Rnd) + 1)
  5.   BHW(i) = Int((100 * Rnd) + 1)
  6.   CHW(i) = Int((100 * Rnd) + 1)
  7.   DHW(i) = Int((100 * Rnd) + 1)
  8. Next
  9. TAry = Array(AHW, BHW, CHW, DHW)  '合併四個一維陣列
  10. MyAry = Application.Transpose(Application.Transpose(TAry))  '將一維陣列轉成正確二維陣列
  11. [A1].Resize(4, 12) = MyAry  '將二維陣列寫入工作表
  12. For i = 1 To 4
  13.    For j = 1 To 12
  14.      MsgBox MyAry(i, j)  '取出二維陣列的值
  15.    Next
  16. Next
  17. End Sub
複製代碼

作者: stillfish00    時間: 2013-1-3 09:50

回復 3# Hsieh
還是版主的方法簡潔 ,
原來第10行transpose兩次還有這種效果:
一維陣列的一維陣列(Arr(m)(n))轉二維(Arr(m,n))




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