Excel 使用宏每N行复制一次
我正在使用Excel VBA创建一个宏,以便从P7向下每隔一行复制一次。我希望将这些复制的值作为连续列正常粘贴到另一个工作簿中。我很确定这将需要一个for循环,但我不确定如何在VBA中实现。下面是我当前的代码,它只复制填充的行而不跳过Excel 使用宏每N行复制一次,excel,vba,Excel,Vba,我正在使用Excel VBA创建一个宏,以便从P7向下每隔一行复制一次。我希望将这些复制的值作为连续列正常粘贴到另一个工作簿中。我很确定这将需要一个for循环,但我不确定如何在VBA中实现。下面是我当前的代码,它只复制填充的行而不跳过 Option Explicit Sub copyRange() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim i
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
如果解决了您的问题,我可以作为答案发布,这样我们就可以将问题标记为已回答。。。防止事情无限期地拖延。我相信是的