【问题标题】:VBA Dual Loops Contiguous and Non ContiguousVBA 双循环连续和非连续
【发布时间】: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 个位置。也许我正在寻找无法完成的事情:复制连续数据范围,对其进行处理,然后将结果粘贴到非连续范围中 - 重复...无论如何,我感谢您的帮助。我最终会解决的。

标签: vba excel


【解决方案1】:

你可以使用一个变量; n.继续步进 12,但要放置 i 变量的位置,使用 n 和 除以 12 并加 4

【讨论】:

    【解决方案2】:

    在我对代码变得更好之前,我必须解决这个问题...我将“文件”表上的数据步进以与数据表上的步骤一致。为了使“文件”选项卡上的数据保持可读性,我只是隐藏了添加的列。这使我可以在两个复制粘贴操作中使用“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 2014-03-20
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多