Select 多个范围,一次粘贴一个

Select multiple ranges and paste one at time

我真的是 VBA 的初学者,我正在尝试复制一系列范围并且需要一次粘贴一个(到偏移行工作)。

这张图片是我的:

这张图片就是我想要的:

要做到这一点,我想在基于范围的复制中仅奇数范围并粘贴到 "F" 列中,仅复制偶数范围并粘贴到 "N" 列中。

目前,我有这段代码。我工作得不是很好,但我有 20 个奇数范围和 20 个偶数范围。我需要一个简单的方法来重复这 20 次

        Range("A3:G7").Copy
        Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=1).PasteSpecial xlPasteAll
        Application.CutCopyMode = False

        Range("A15:G19").Copy
        Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=2).PasteSpecial xlPasteAll
        Application.CutCopyMode = False

        Range("A27:G31").Copy
        Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=2).PasteSpecial xlPasteAll
        Application.CutCopyMode = False

在一起(这里我只显示代码的 3 次重复)。

    Dim ws As Worksheet

    Application.ScreenUpdating = False
    Sheets("Car").Activate
    Range("F2:AA250").Delete
    Sheets("Summary").Activate

            Range("A3:G7").Copy
            Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=1).PasteSpecial xlPasteAll
            Application.CutCopyMode = False

            Range("A15:G19").Copy
            Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=2).PasteSpecial xlPasteAll
            Application.CutCopyMode = False

            Range("A27:G31").Copy
            Worksheets("Car").Cells(Rows.Count, "F").End(xlUp).Offset(RowOffset:=2).PasteSpecial xlPasteAll

            Application.CutCopyMode = False
            Range("F2").Activate
    Application.ScreenUpdating = True
End Sub

试试这个。我还没有测试过它,所以如果它第一次成功,我会很惊讶!

它确实依赖于右上角的单元格中有一些东西。如果没有,循环将停止。如果您事先知道需要多少份副本,For-Next 循环会更好。

Sub x()

Dim r As Range, n As Long: n = 1

With Worksheets("Summary")
    Set r = .Range("A3:G7")
    Do Until IsEmpty(r.Cells(1, r.Columns.Count))
        r.Copy Worksheets("Car").Range("F" & n)
        r.Offset(r.Rows.Count + 1).Copy Worksheets("Car").Range("N" & n)
        Set r = r.Offset((r.Rows.Count + 1) * 2)
        n = n + r.Rows.Count + 1
    Loop
End With

End Sub

请试试这个简单的方法。只有你的第一个范围就足够了。根据迭代次数(奇数或偶数),代码可以选择将范围复制到适当的位置。您可以进行更多迭代,仅更改迭代次数 (howMany):

Sub CopyRange_()
Dim sh As Worksheet, nextRow As Long, howMany As Long
Dim rng As Range, i As Long, No As Long
Set sh = ActiveSheet
Set rng = sh.Range("A3:L8"): nextRow = rng.Cells(1, 1).Row
No = 2: howMany = 20
rng.Copy

 For i = 1 To howMany - 1
    If i Mod 2 = 0 Then
        sh.Range("A" & nextRow).Select: sh.Paste
        sh.Range("L" & nextRow).value = No: No = No + 1
    Else
        sh.Range("N" & nextRow).Select: sh.Paste
        sh.Range("Y" & nextRow).value = No: No = No + 1
        nextRow = nextRow + rng.Rows.Count
    End If
 Next i
End Sub

如果您需要更多行,选择适当的范围就足够了,而不是 "A3:L8"。 "A3:L10",例如...