Excel VB - 复制/粘贴单元格:如何增加单元格的范围

时间:2015-09-12 20:24:59

标签: excel-vba vba excel

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

1 个答案:

答案 0 :(得分: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