Excel 使用宏每N行复制一次

Excel 使用宏每N行复制一次,excel,vba,Excel,Vba,我正在使用Excel VBA创建一个宏,以便从P7向下每隔一行复制一次。我希望将这些复制的值作为连续列正常粘贴到另一个工作簿中。我很确定这将需要一个for循环,但我不确定如何在VBA中实现。下面是我当前的代码,它只复制填充的行而不跳过 Option Explicit Sub copyRange() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim i

我正在使用Excel VBA创建一个宏,以便从P7向下每隔一行复制一次。我希望将这些复制的值作为连续列正常粘贴到另一个工作簿中。我很确定这将需要一个for循环,但我不确定如何在VBA中实现。下面是我当前的代码,它只复制填充的行而不跳过

Option Explicit
Sub copyRange()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim i As Integer
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim strExtension As String
    Dim LastRowC As Long
    Dim LastRowP As Long
    Dim filterRange As Range
    Dim copyRange As Range

    Const strPath As String = "C:\Users\User1\Desktop\UPLOADS2\"
    ChDir strPath
    strExtension = Dir(strPath & "*.xls*")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource.Sheets("Sheet1")
            LastRowC = wkbSource.Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row
            'LastRowP = wkbDest.Worksheets("WIP").Cells(wkbDest.Worksheets("WIP").Rows.Count, "P").End(xlUp).Offset(1).Row
            wkbSource.Worksheets("Sheet1").Range("B4:B" & LastRowC).Copy
            wkbDest.Worksheets("WIP").Range("P7").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
        End With
        wkbSource.Close savechanges:=False
        strExtension = Dir
    Loop
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub
选项显式
子复制范围()
Application.ScreenUpdating=False
Application.Calculation=xlCalculationManual
作为整数的Dim i
将wkbDest设置为工作簿
将wkbSource设置为工作簿
设置wkbDest=thishworkbook
作为字符串的Dim strExtension
暗淡的最后一行
暗淡的最后一行一样长
模糊过滤范围
暗拷贝范围作为范围
Const strPath As String=“C:\Users\User1\Desktop\UPLOADS2”
ChDir strPath
strExtension=Dir(strPath&“*.xls*”)
当strExtension“”时执行此操作
设置wkbSource=Workbooks.Open(strPath&strExtension)
使用wkbSource.Sheets(“Sheet1”)
LastRowC=wkbSource.Worksheets(“Sheet1”)。单元格(Rows.Count,“B”)。结束(xlUp)。行
'LastRowP=WKBTest.Worksheets(“WIP”).Cells(WKBTest.Worksheets(“WIP”).Rows.Count,“P”).End(xlUp).Offset(1).Row
wkbSource.工作表(“Sheet1”).范围(“B4:B”和LastRowC).副本
wkbDest.工作表(“WIP”).范围(“P7”).粘贴特殊粘贴:=XLPasteValues和NumberFormats
Application.CutCopyMode=False
以
wkbSource.Close savechanges:=False
strExtension=Dir
环
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
端接头

您可以管理
for
循环的
步骤
,以修改通过
next i
迭代的数字,从而:

Dim i as Long
For i = 4 to LastRowC Step 2
    'Use Cells(i,"B") or Range("B" & i)
Next i

在这种情况下,第2步将使您从4到6再到8,以此类推。

您可以管理
for
循环的
步骤
,以修改通过
下一个i
迭代的数字,以便:

Dim i as Long
For i = 4 to LastRowC Step 2
    'Use Cells(i,"B") or Range("B" & i)
Next i

在这种情况下,第2步将使您从4到6再到8,以此类推。

只是为了好玩,没有任何循环:

Dim lr As Long

With Sheet1
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row: If lr Mod 2 = 1 Then lr = lr - 1
    .Range(Join(.Evaluate("TRANSPOSE(""B""&2+ROW(1:" & ((lr - 4) / 2) + 1 & ")*2)"), ",")).Copy
End With

未测试,但可能会加快过程,因为您只需要使用剪贴板一次。

只是为了好玩,没有任何循环的替代方法:

Dim lr As Long

With Sheet1
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row: If lr Mod 2 = 1 Then lr = lr - 1
    .Range(Join(.Evaluate("TRANSPOSE(""B""&2+ROW(1:" & ((lr - 4) / 2) + 1 & ")*2)"), ",")).Copy
End With

未测试,但可能会加快过程,因为您只需要使用剪贴板一次。

是否尝试为此编写循环?“我不知道如何”会导致人们说“循环”。为了帮助缩小搜索范围,请尝试
For
循环,例如,
For I=4 to LastRowC Step 2
意味着每个
下一个I
循环将迭代2个步骤。哦,好吧,我不知道Step关键字。感谢您或正常循环
i
,对您复制的行使用
2*i
(或
2*i+1
)对您粘贴的行使用
i
如果解决了您的问题,我可以作为答案发布,这样我们就可以将问题标记为已回答。。。防止事情无限期地拖延。我相信是的,你试过为此写一个循环吗?“我不知道如何”会导致人们说“循环”。为了帮助缩小搜索范围,请尝试
For
循环,例如,
For I=4 to LastRowC Step 2
意味着每个
下一个I
循环将迭代2个步骤。哦,好吧,我不知道Step关键字。感谢您或正常循环
i
,对您复制的行使用
2*i
(或
2*i+1
)对您粘贴的行使用
i
如果解决了您的问题,我可以作为答案发布,这样我们就可以将问题标记为已回答。。。防止事情无限期地拖延。我相信是的