循环复制列中的行

时间:2018-10-18 08:00:08

标签: excel vba excel-vba

早上好

我想问你如何循环复制行中的批量数据值。

在我的情况下,有十个表,我必须在其中输入数据。 根据Excel公式,我可以使用“粘贴公式”选项将其复制。

但是在VBA中,当我使用下面的代码时,它似乎很笨重:

Sub sum_month()
Sheets("13").Activate
Range("EG822").Formula = "=SUM(EG12+EG282+EG552)"            '-4
Range("EG822").Copy
Range("EG822:FT846").PasteSpecial xlPasteFormulas
Range("EG822:FT846").Copy
Range("FY822:HL846").PasteSpecial xlPasteFormulas
Range("HR822:JE846").PasteSpecial xlPasteFormulas

Range("EG852").Formula = "=SUM(EG42+EG312+EG582)"            '-3
Range("EG852").Copy
Range("EG852:FT876").PasteSpecial xlPasteFormulas
Range("EG852:FT876").Copy
Range("FY852:HL876").PasteSpecial xlPasteFormulas
Range("HR852:JE876").PasteSpecial xlPasteFormulas

Range("EG882").Formula = "=SUM(EG72+EG342+EG612)"            '-2
Range("EG882").Copy
Range("EG882:FT906").PasteSpecial xlPasteFormulas
Range("EG882:FT906").Copy
Range("FY882:HL906").PasteSpecial xlPasteFormulas
Range("HR882:JE906").PasteSpecial xlPasteFormulas
End Sub

基本上,我必须在第30步中在同一行中进行复制(该问题涉及上述代码中的许多列)。

有人知道如何处理吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以对For i使用Step 30循环,然后在第一个范围.Offset行中使用i

请注意,求和公式也需要调整。

Sub sum_month()
    Dim i As Long
    For i = 0 To 60 Step 30
        With Sheets("13")
            .Range("EG822").Offset(RowOffset:=i).Formula = "=SUM(EG" & 12 + i & "+EG" & 282 + i & "+EG" & 552 + i & ")"    '-4
            .Range("EG822").Offset(RowOffset:=i).Copy
            .Range("EG822:FT846").Offset(RowOffset:=i).PasteSpecial xlPasteFormulas
            .Range("EG822:FT846").Offset(RowOffset:=i).Copy
            .Range("FY822:HL846").Offset(RowOffset:=i).PasteSpecial xlPasteFormulas
            .Range("HR822:JE846").Offset(RowOffset:=i).PasteSpecial xlPasteFormulas
        End With
    Next i
End Sub

我建议不要使用.Activate.Select。参见How to avoid using Select in Excel VBA

答案 1 :(得分:0)

此公式有效:

Sub sum_1to10_fillUK()
Dim i As Long
For i = 0 To 474 Step 52  'total amount of rows = 472, that includes 9 tables (each with 52 rows) + 3 rows free spaces between them
With Sheets("14")
.Range("FP12").Offset(RowOffset:=i).Copy     'The SUM for FP12 has been calculated in another loop, so I am only copying the formulas from here.
.Range("FP12:HN58, HT12:JR58, JX12:LV58").Offset(RowOffset:=i).PasteSpecial xlPasteFormulas               ' where FP-HN is 1st table, HT-JR - 2nd one and JX-LV - the last one from the right (see the picture)
End With
Next i
End Sub

enter image description here