【问题标题】:vba nested for loopvba嵌套for循环
【发布时间】:2021-07-21 15:12:45
【问题描述】:

我仍在学习过程中,所以我需要一些帮助。

我有这个代码

worksheets("List").Activate

Range("B2").Activate

    For i = 0 To 500
        ActiveCell.Offset(i, 0).Select
        Selection.Copy
        
        For j = 0 To 8000
        
            Worksheets("Code").Activate
            Range("C2").Activate
        
            ActiveCell.Offset(j, 0).Range("A1").Select
            ActiveSheet.Paste
            
            j = j + 13
    
        Next j
    
    Next i

End Sub 

所以基本上我要做的是将列表工作表中的一个单元格复制到代码工作表上的另一个单元格上。但我希望它每次将一个单元格复制到代码工作表时跳过 13 个单元格。我认为我嵌套它的方式存在问题,所以我希望它从 List 工作表中复制 i ,将其粘贴到 Code 工作表上的 j 上,然后返回,从 List 工作表中复制下一个 i ,然后将其粘贴到代码表上的第 (j + 13) 个单元格并循环,直到所有 i 值都被复制。有人可以帮我纠正循环嵌套吗,我真的很感激! :)

我认为我每次都将相同的 i 值复制到 j + 13 上,这不是我想要的。

【问题讨论】:

  • 如果你还在学习过程中,你可能会受益于阅读How to avoid using Select in Excel VBA
  • For j = 0 To 8000 Step 13 会比在循环内更改 j 好得多 - 这是使用 For...Next 循环时的禁忌。

标签: excel vba


【解决方案1】:

解释你的代码有点困难,但这样的事情可能很接近:

Sub Tester()
    Dim wsList As Worksheet, wsCode As Worksheet, i As Long
    
    Set wsList = Worksheets("List")
    Set wsCode = Worksheets("Code")
    
    For i = 1 To 500
        'copy/paste
        wsList.Range("B2").Offset(i - 1).Copy _
            wsCode.Range("C2").Offset((i - 1) * 13)

        'or copy value only (faster)
        wsCode.Range("C2").Offset((i - 1) * 13).Value = _
            wsList.Range("B2").Offset(i - 1).Value

    Next i
End Sub

无需激活/选择

【讨论】:

  • 嗨,我收到“无效使用属性”错误,它突出显示 wsCode.Range("C2").Offset((i - 1) * 13) 中的 .Offset
  • 复制操作是一行很长的行,带有 _ 延续 - 你包括了吗?
  • 这就像一个魅力。非常感谢,非常感谢您的帮助!! :) :)
  • 另一个快速的问题。我正在尝试对另一个单元格做完全相同的事情,但在这种情况下,我正在复制的单元格有一个公式,我只想粘贴值,而不是公式。我该如何修改代码来做到这一点?
  • 非常感谢你是救世主!你有什么书/资源推荐可以帮助我更好地学习 vba 吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2016-04-17
  • 2014-03-20
相关资源
最近更新 更多