麻辣家族討論版版's Archiver

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

各位前輩
小弟自己摸索出目前可運作的程式碼如下[code]
    Dim Arr_ssd, Arr_temp, ReArr_1, ReArr_2, Arr_out As Variant
    Dim a, b, c, i, j, k, rr, cc, x, y As Variant
   
    Application.DisplayAlerts = False
   
    Windows("array-1.xls").Activate
    i = Workbooks("array-1").Sheets("統計表").UsedRange.Rows.Count
    j = Round((i / 25) + 0.5)
    k = 0 'k為判斷執行次數
   
    Worksheets("統計表").Activate
    Arr_ssd = Sheets("統計表").Range([A2], Cells(i, 1).Offset(, 7)).Value
    Arr_out = Sheets("匯出表").Range("A2:I26")
    Dim dd As Range
    Set dd = Sheets("匯出表").Range("A2")
    ReDim Arr_temp(1 To 25, 1 To 9)
   
    ReArr_1 = WorksheetFunction.Transpose(Arr_ssd)
    ReDim Preserve ReArr_1(1 To 9, 1 To 1 + (25 * j))
    ReArr_2 = WorksheetFunction.Transpose(ReArr_1)
   
    x = 1
    y = 1
    rr = 0
   
    For k = 1 To j
        For y = 1 + (rr) To 25 + (rr)
            For x = 1 To 9
                Arr_temp(y - (rr), x) = ReArr_2(y, x)
                Debug.Print Arr_temp(y - (rr), x)
            Next x
        Next y
        rr = rr + 25
        dd.Resize(UBound(Arr_temp, 1), UBound(Arr_temp, 2)).Value = Arr_temp
        
        '輸出表單
    Next k

[/code]不知道有沒有更簡單的方式?想盡可能減少使用迴圈

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供