为了清晰起见重写这一点,我认为原件太混乱太长了。
我正在尝试从名为“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
答案 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