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
答案 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