【发布时间】:2015-08-04 23:40:06
【问题描述】:
为了清楚起见,我认为原来的内容太混乱而且太长了。
我正在尝试从名为“文件”的工作表中获取连续的时间序列数据,在名为“数据”的工作表上通过一系列计算对其进行处理,复制这些结果并将它们作为静态数据粘贴到非连续的在“数据”上设置范围,然后重复该过程,直到所有数据都已处理。
过去五天我一直在努力解决的问题是第二个函数的位置。如果我将它嵌套在“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
【问题讨论】:
-
如果我从您的稀疏示例列中推断 AR 与列 AF 偏移 12 列,如果再重复 21 次,您将到达 KJ 列。如果该交错是一致的,则可以使用
For 32 to 296 Step 12 Next。 -
你错了。我尝试了一个“步骤”,但无法让它发挥作用......我会更深入地研究它,看看我是否能解决它。感谢您的意见。
-
@Jeeped 当我将“For 32”放入“For i”时,它会将结果写入所有 25 个位置,然后再继续下一批数据 - 这就是让我感到沮丧的原因天。我被困在“for”结构上。如何避免嵌套但仍让代码遍历这两个步骤。
-
我之前的提示是简写,因为我无法在注释中正确地编写代码 sn-p。第一行应该是
For i = 32 to 296 Step 12然后下一行应该是你的操作代码然后循环应该用Next i关闭。 -
如果我这样做,它会替换当前的“i = 4 to 26”,它会抓取连续数据。如果我嵌套另一个变量,它会在移动到下一个“i”之前写入所有 25 个位置。也许我正在寻找无法完成的事情:复制连续数据范围,对其进行处理,然后将结果粘贴到非连续范围中 - 重复...无论如何,我感谢您的帮助。我最终会解决的。