VBA双循环连续和非连续

时间:2014-11-04 23:07:57

标签: excel vba excel-vba

为了清晰起见重写这一点,我认为原件太混乱太长了。

我正在尝试从名为“Files”的工作表中获取连续的时间序列数据,在名为“Data”的工作表上通过一系列计算处理它,复制这些结果并将它们作为静态数据粘贴到非连续的“数据”上的范围,然后重复该过程,直到处理完所有数据。

过去五天我一直在努力解决的问题是第二个功能的放置。如果我将其嵌套在“i”中,它会将每个单个结果写入25次非连续范围。如果我将它放在“i”之外,它就会完成“i”,然后只将最后一个结果写入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

2 个答案:

答案 0 :(得分:1)

你可以使用一个变量; ñ。继续步进12,但是如果要放置i变量,请使用n和除以12并添加4

答案 1 :(得分:0)

直到我对代码变得更好,我才能解决这个问题......我将“文件”表上的数据与数据表上的步骤重合。为了使数据在“文件”选项卡上可读,我只是隐藏了添加的列。这允许我使用“i”进行两次复制粘贴操作。我确信有更好的方法,但这符合我的需求,并且比我开始使用的原始代码快得多。

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