2014-11-04 151 views
0

爲了清晰起見,我認爲原文太混亂,太長。VBA雙環連續和不連續

我試圖從名爲「文件」的工作表中抓取連續的時間序列數據,通過名爲「數據」的工作表上的一系列計算來處理它,複製這些結果並將它們作爲靜態數據粘貼到非數據表中, 「數據」上的連續範圍,然後重複該過程,直至處理完所有數據。

過去五天我一直在努力的問題是放置第二個函數。如果我將它嵌入「i」中,它會將每個單獨結果寫入非連續範圍25次。如果我將它放在「我」之外,它將完成「我」,然後只將最後一個結果寫入到25個位置中的每一個。

我很確定在這一點上,我使用了錯誤的結構,我猜「for」循環不是第二個函數的方法,但我對這個很新穎不能真正讓我的腦袋纏繞如何實施它否則。我也試圖將「n」作爲一個數組結構化,但從來沒有能夠得到調試,並且不確定它是否是正確的方法。

Sub getData() 

' Process individual time series 

Dim Data As Worksheet, Files As Worksheet 
Dim fLastRow As Long, dLastRow As Long 
Dim i As Long, n As Long 

Application.ScreenUpdating = False 

Set Data = ActiveWorkbook.Sheets("Data") 
Set Files = ActiveWorkbook.Sheets("Files") 

fLastRow = Files.Range("A" & Files.Rows.Count).End(xlUp).Row 
dLastRow = Data.Range("F" & Data.Rows.Count).End(xlUp).Row 

' Process three column data 

    Files.Range("A1:C" & fLastRow).Copy 
    Data.Range("A3").PasteSpecial xlPasteValuesAndNumberFormats 
    Data.Range("F202:P" & dLastRow).Copy 
    Data.Range("T202").PasteSpecial xlPasteValuesAndNumberFormats 

' Process single column data 

    For i = 4 To 26 
      Files.Activate 
      Range(Cells(1, i), Cells(3509, i)).Copy 
      Data.Range("C3").PasteSpecial xlPasteValuesAndNumberFormats 
      Data.Range("F202:P" & dLastRow).Copy 
     For n = 32 To 296 Step 12 ' <~~ this is the problem. inside or outside "i" doesn't work. 
      Data.Activate 
      Range(Cells(202, n), Cells(3511, n)).PasteSpecial xlPasteValuesAndNumberFormats 
     Next n ' <~~ i know this is the problem just not sure what the answer is. 
    Next i 

' Post processing 

    Data.Cells.Columns.AutoFit 
    Application.CutCopyMode = False 
    Application.ScreenUpdating = True 
    Data.Activate 
    Data.Range("A1").Select 

End Sub 
+0

如果從您的稀疏示例列中外推AR,則從列AF中偏移12列,並且如果重複另有21次你到達KJ欄。如果這個交錯是一致的,那麼可以使用「對於32到296步驟12接下來」。 – Jeeped 2014-11-04 23:20:08

+0

你是錯的。我嘗試了一個「步驟」,但無法實現它......我會更深入地探究,看看我能否把它整理出來。感謝您的意見。 – Xcrape 2014-11-04 23:37:40

+0

@在我將「For 32」放入「For i」時,它會將結果寫入所有25個位置,然後再繼續處理下一批數據 - 這已經讓我連續數天受到傷害。我被困在「for」結構中。如何避免嵌套,但仍然獲得代碼來遍歷這兩個步驟。 – Xcrape 2014-11-05 05:20:11

回答

0

,直到我得到的代碼更好,我將不得不滿足於這個...我踩在「文件」表中的數據與數據表上的步驟一致。爲了保持數據在「文件」選項卡上的可讀性,我只隱藏了添加的列。這使我可以使用「我」來進行復制粘貼操作。我相信有更好的方法,但這符合我的需求,比我開始的原始代碼快得多。

Sub getData() 

' Process individual time series 

Dim Data As Worksheet, Files As Worksheet 
Dim fLastRow As Long, dLastRow As Long, i As Long 

Set Data = ActiveWorkbook.Sheets("Data") 
Set Files = ActiveWorkbook.Sheets("Files") 
fLastRow = Files.Range("A" & Files.Rows.Count).End(xlUp).Row 
dLastRow = Data.Range("F" & Data.Rows.Count).End(xlUp).Row 

Application.ScreenUpdating = False 

' Process data 

    Files.Range("A1:C" & fLastRow).Copy 
    Data.Range("A3").PasteSpecial xlPasteValuesAndNumberFormats 
    Data.Range("F202:P" & dLastRow).Copy 
    Data.Range("T202").PasteSpecial xlPasteValuesAndNumberFormats 
    Files.Range("D1:JH" & fLastRow).Copy 
    Data.Range("AF3520").PasteSpecial xlPasteValuesAndNumberFormats 

    For i = 32 To 296 Step 12 
     Data.Range(Cells(3520, i), Cells(7103, i)).Copy 
     Data.Range("C3").PasteSpecial xlPasteValuesAndNumberFormats 
     Data.Range("F202:P" & dLastRow).Copy 
     Data.Range(Cells(202, i), Cells(3511, i)).PasteSpecial xlPasteValuesAndNumberFormats 
    Next i 

' Post processing 

    Data.Range(Cells(3520, 32), Cells(7103, 296)).ClearContents 
    Data.Cells.Columns.AutoFit 
    Application.CutCopyMode = False 
    Application.ScreenUpdating = True 
    Range("A1").Select 

End Sub 
1

您可以使用一個變量; ñ。繼續步進12,但要放置i變量的位置,請使用n和除以12,然後加上4