2014-11-04 89 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