【问题标题】:Excel VB - Copy/Paste cells: How can I increment the range of to/from cellsExcel VBA - 复制/粘贴单元格:如何增加到/从单元格的范围
【发布时间】:2015-09-13 04:46:02
【问题描述】:

VB 的新手,这是我为将一系列单元格从一个工作表复制到另一个工作表而编写的(我知道这很糟糕,但它适用于单次迭代)。

问题是我有 65 行要从一个工作表复制到另一个工作表。一次迭代相当于将具有 56 列(56 个单元格)的单行复制到第二个工作表中,其中配置为 8 行乘 7 列。我一直在看视频和阅读,但我不知道如何有效地复制,甚至不知道如何使用效率低下的代码,不知道如何将所有单元格值递增一并循环。

对我应该阅读的功能有什么建议可以帮助我解决这个问题吗?

Sub Copytax()

    Worksheets("Sheet3").Activate
    Range("A5:G5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E34:K34").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("H5:N5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E35:K35").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("O5:U5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E36:K36").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("V5:AB5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E37:K37").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("AC5:AI5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E38:K38").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("AJ5:AP5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E39:K39").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("AQ5:AW5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E40:K40").PasteSpecial

    Worksheets("Sheet3").Activate
    Range("AX5:BD5").Select
    Selection.Copy
    Worksheets("TaxFormat").Activate
    Range("E41:K41").PasteSpecial

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    看完How to avoid using Select in Excel VBA macros,不难将你的代码转换成:

    Sub Copytax()
        Worksheets("Sheet3").Range("A5:G5").Copy Worksheets("TaxFormat").Range("E34:K34")
        Worksheets("Sheet3").Range("H5:N5").Copy Worksheets("TaxFormat").Range("E35:K35")
        Worksheets("Sheet3").Range("O5:U5").Copy Worksheets("TaxFormat").Range("E36:K36")
        Worksheets("Sheet3").Range("V5:AB5").Copy Worksheets("TaxFormat").Range("E37:K37")
        Worksheets("Sheet3").Range("AC5:AI5").Copy Worksheets("TaxFormat").Range("E38:K38")
        Worksheets("Sheet3").Range("AJ5:AP5").Copy Worksheets("TaxFormat").Range("E39:K39")
        Worksheets("Sheet3").Range("AQ5:AW5").Copy Worksheets("TaxFormat").Range("E40:K40")
        Worksheets("Sheet3").Range("AX5:BD5").Copy Worksheets("TaxFormat").Range("E41:K41")
    End Sub
    

    从这一点开始,您可以保持原样,或转换为每次复制 7 个单元格的循环:

    Dim i As Long
    Dim SourceRange As Range, FirstTargetRange As Range
    
    Set SourceRange = Worksheets("Sheet3").Range("A5:BD5")
    Set FirstTargetRange = Worksheets("TaxFormat").Range("E34:K34")
    
    For i = 1 To SourceRange.Cells.Count Step 7
      SourceRange.Cells(1, i).Resize(, 7).Copy FirstTargetRange.Offset(i \ 7, 0)
    Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 2018-09-06
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多