返回列表 上一主題 發帖

[發問] 如何合併陣列

[發問] 如何合併陣列

本帖最後由 sunnyso 於 2013-5-12 03:09 編輯

請教各位大大,除了用For以外,VBA有沒有更簡潔有效的方法合併陣列呢?

例如
  1.   |A1 B1 C1|
  2. A=|A2 B2 C2|
  3.   |A3 B3 C3|

  4. B=|A4 B4 C4|
  5.   |A5 B5 C5|

  6. C= A ++ B

  7.   |A1 B1 C1|
  8.   |A2 B2 C2|
  9. C=|A3 B3 C3|
  10.   |A4 B4 C4|
  11.   |A5 B5 C5|
複製代碼
ss

回復 1# sunnyso


    大大您好:
不知引用array是否
符合大大的須求
c=array(a,b)

TOP

回復 1# sunnyso
  1. Option Explicit
  2. Sub EX()
  3.     Dim A As Variant, B As Variant, C As Variant, I As Integer
  4.     A = Array(Array("A1", "B1", "C1"), Array("A2", "B2", "C2"), Array("A3", "B3", "C3"))
  5.     B = Array(Array("A4", "B4", "C4"), Array("A5", "B5", "C5"))
  6.     C = A
  7.     For I = 0 To UBound(B)
  8.         ReDim Preserve C(0 To UBound(C) + 1)
  9.         'ReDim 陳述式  在程序層次中用來重新配置動態陣列變數的儲存空間。
  10.         'Preserve  當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字
  11.         C(UBound(C)) = B(I)
  12.     Next
  13. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# GBKEE

感謝大大, 請問有沒有不用迴圈的方法.
ss

TOP

回復 4# sunnyso
待我再想一想有無!!!
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# sunnyso
兩個二維Array,不使用For,合併為一個
我只想的到借用工作表...
把兩個 Array 丟到儲存格再拿出來...

但是我感覺這樣比For沒有效率

TOP

回復 6# stillfish00

感謝, 可否提供code參考

thanks
ss

TOP

回復 7# sunnyso
  1. Sub EXE()
  2.     Dim A As Variant, B As Variant, C As Variant, D As Variant, I As Integer
  3.     A = Array(Array("A1", "B1", "C1"), Array("A2", "B2", "C2"), Array("A3", "B3", "C3"))
  4.     B = Array(Array("A4", "B4", "C4"), Array("A5", "B5", "C5"))
  5.     [A1].Resize(UBound(A) + 1, 3) = Application.Transpose(Application.Transpose(A)) '陣列A寫入工作表
  6.     [A1].Offset(UBound(A) + 1).Resize(UBound(B) + 1, 3) = Application.Transpose(Application.Transpose(B)) '陣列B寫入工作表
  7.     D = Range("A1").CurrentRegion.Value '將儲存格資料存成新陣列
  8.     Range("A1").CurrentRegion = ""
  9.     [A1].Resize(UBound(D, 1), UBound(D, 2)) = D '寫回工作表
  10. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 c_c_lai 於 2013-5-18 09:18 編輯

回復 7# sunnyso
回復 5# GBKEE
回復 8# Hsieh
謝謝 GBKEE 以及 Hsieh 兩位大大的範例。
茲將它們稍稍引用:
  1. Option Explicit

  2. Sub EX()            '  GBKEE
  3.     Dim A As Variant, B As Variant, C As Variant, I As Integer
  4.     A = Array(Array("A1", "B1", "C1"), Array("A2", "B2", "C2") ,Array("A3", "B3", "C3"), Array("A4", "B4", "C4"))
  5.     B = Array(Array("A5", "B5", "C5"), Array("A6", "B6", "C6"))
  6.     C = A
  7.     For I = 0 To UBound(B)
  8.         ReDim Preserve C(0 To UBound(C) + 1)
  9.         'ReDim 陳述式  在程序層次中用來重新配置動態陣列變數的儲存空間。
  10.         'Preserve  當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字
  11.         C(UBound(C)) = B(I)
  12.     Next
  13.     Range("A1").CurrentRegion = ""
  14.     '  UBound(C) = 5,  UBound(C(0)) = 2
  15.     [A1].Resize(UBound(C) + 1, UBound(C(0)) + 1) = Application.Transpose(Application.Transpose(C))                       ' 陣列A寫入工作表
  16. End Sub

  17. Sub EX2()             '  Hsieh
  18.     Dim A As Variant, B As Variant, C As Variant, D As Variant, I As Integer

  19.     Range("A1").CurrentRegion = ""
  20.     A = Array(Array("A1", "B1", "C1"), Array("A2", "B2", "C2"), Array("A3", "B3", "C3"), Array("A4", "B4", "C4"))
  21.     B = Array(Array("A5", "B5", "C5"), Array("A6", "B6", "C6"))

  22.     '  UBound(A) = 3, UBound(A(0)) = 2
  23.     [A1].Resize(UBound(A) + 1, UBound(A(0)) + 1) = Application.Transpose(Application.Transpose(A))                       ' 陣列A寫入工作表
  24.     '  UBound(A) = 3, UBound(B) = 1, UBound(B(0)) = 2
  25.     [A1].Offset(UBound(A) + 1).Resize(UBound(B) + 1, UBound(B(0)) + 1) = Application.Transpose(Application.Transpose(B)) ' 陣列B寫入工作表

  26.     D = Range("A1").CurrentRegion.Value                                                                   ' 將儲存格資料存成新陣列
  27.     Range("A1").CurrentRegion = ""
  28.     '  UBound(D, 1) = 6,  UBound(D, 2) = 3
  29.     [A1].Resize(UBound(D, 1), UBound(D, 2)) = D                                                           ' 寫回工作表
  30. End Sub
複製代碼

TOP

回復 8# Hsieh

感謝超版
ss

TOP

        靜思自在 : 愛不是要求對方,而是要由自身的付出。
返回列表 上一主題