Board logo

標題: [發問] VBA 動態陣列操作取值 [打印本頁]

作者: u800901    時間: 2021-1-26 12:27     標題: VBA 動態陣列操作取值

各位前輩好

請問要如何操作陣列取某些值之後偏移再取值?

假設workbooks("book1").sheets("sheet1")內有個動態陣列array()

我要執行N次,固定取3個值
第一次取陣列內位置0~2的值,輸出值到"book2"中"sheet2"的"A1:C1"
第二次取3~5,輸出值到"book2"中"sheet3"的"A1:C1"
第三次取6~8,輸出值到"book2"中"sheet4"的"A1:C1"
依此類推

因為資料量會一直增加
原本用VBA寫出動作的功能
但是發現資料量比較多的時候,運作會需要一段時間
因為是逐筆資料複製貼上→新增分頁→貼上
想說用陣列加快速度
不知道上面想法可不可行

目前只會寫出全部資料寫入陣列內
輸出到book2中sheet2的"A1:C1"內
但是要輸出到下一頁就卡關了

請各位前輩指點小弟:'(
作者: u800901    時間: 2021-1-26 21:41

各位前輩
小弟自己摸索出目前可運作的程式碼如下
  1.     Dim Arr_ssd, Arr_temp, ReArr_1, ReArr_2, Arr_out As Variant
  2.     Dim a, b, c, i, j, k, rr, cc, x, y As Variant
  3.    
  4.     Application.DisplayAlerts = False
  5.    
  6.     Windows("array-1.xls").Activate
  7.     i = Workbooks("array-1").Sheets("統計表").UsedRange.Rows.Count
  8.     j = Round((i / 25) + 0.5)
  9.     k = 0 'k為判斷執行次數
  10.    
  11.     Worksheets("統計表").Activate
  12.     Arr_ssd = Sheets("統計表").Range([A2], Cells(i, 1).Offset(, 7)).Value
  13.     Arr_out = Sheets("匯出表").Range("A2:I26")
  14.     Dim dd As Range
  15.     Set dd = Sheets("匯出表").Range("A2")
  16.     ReDim Arr_temp(1 To 25, 1 To 9)
  17.    
  18.     ReArr_1 = WorksheetFunction.Transpose(Arr_ssd)
  19.     ReDim Preserve ReArr_1(1 To 9, 1 To 1 + (25 * j))
  20.     ReArr_2 = WorksheetFunction.Transpose(ReArr_1)
  21.    
  22.     x = 1
  23.     y = 1
  24.     rr = 0
  25.    
  26.     For k = 1 To j
  27.         For y = 1 + (rr) To 25 + (rr)
  28.             For x = 1 To 9
  29.                 Arr_temp(y - (rr), x) = ReArr_2(y, x)
  30.                 Debug.Print Arr_temp(y - (rr), x)
  31.             Next x
  32.         Next y
  33.         rr = rr + 25
  34.         dd.Resize(UBound(Arr_temp, 1), UBound(Arr_temp, 2)).Value = Arr_temp
  35.         
  36.         '輸出表單
  37.     Next k
複製代碼
不知道有沒有更簡單的方式?想盡可能減少使用迴圈




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