如何使迭代宏跳过Excel中的某些行?
我有一个excel宏,用VBA编写,可以将数据从一个工作表复制到另一个工作表。现在,72和77之间的行不再需要了(有一个表总是放在需要转到的行之间),所以我想通过从最后一张表中删除它们来停止对它们的迭代。我怎样才能做到这一点?下面是我的子程序的代码:如何使迭代宏跳过Excel中的某些行?,excel,vba,Excel,Vba,我有一个excel宏,用VBA编写,可以将数据从一个工作表复制到另一个工作表。现在,72和77之间的行不再需要了(有一个表总是放在需要转到的行之间),所以我想通过从最后一张表中删除它们来停止对它们的迭代。我怎样才能做到这一点?下面是我的子程序的代码: Windows(report).Activate Sheets("bond forward").Select k = 1000 For conta = 16 To 500 If Cells(conta, 14) = "BDCHFT_MM
Windows(report).Activate
Sheets("bond forward").Select
k = 1000
For conta = 16 To 500
If Cells(conta, 14) = "BDCHFT_MM" Then
Rows(conta).Select
Selection.Copy
Rows(k).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
k = k + 1
End If
Next conta
k = 2000
For conta2 = 16 To 500
If Cells(conta2, 14) = "BAT_TIGO" Then
Rows(conta2).Select
Selection.Copy
Rows(k).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
k = k + 1
End If
Next conta2
即使你说你的代码是从一张纸复制到另一张纸,我也找不到另一张纸,你是从同一张纸复制下面的一些行 无论如何,我已经修改了您的代码,因此它不会使用
。请选择或。激活,这是您应该避免的。还添加了对工作表的引用,以便您可以在代码中始终引用它,如示例所示
重要的是,使用Option Explicit
强制声明所有变量,否则您将面临许多错误:
Option Explicit
Sub Test()
Dim ws As Worksheet, k As Long, l As Long, conta As Long
'I believe the workbook with the bond forward sheet is not called report, so change the name and include it's extension
Set ws = Workbooks("Report.xlsx").Sheets("bond forward")
k = 1000
l = 2000
With ws
For conta = 16 To 500
If conta > 71 And conta < 78 Then GoTo NextRow 'this will skip the rows 72-77
If .Cells(conta, 14) = "BDCHFT_MM" Then
.Rows(conta).Copy 'you can copy in one step without selecting
.Rows(k).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'same for paste
k = k + 1
ElseIf .Cells(conta, 14) = "BAT_TIGO" Then 'also you don't need another loop to do this, just another variable for the paste row
.Rows(conta).Copy
.Rows(l).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
l = l + 1
End If
NextRow:
Next conta
End With
End Sub
选项显式
子测试()
将ws标注为工作表,k标注为长,l标注为长,conta标注为长
我相信带有债券远期票据的工作簿不是报告,所以请更改名称并包括其扩展名
设置ws=工作簿(“Report.xlsx”).工作表(“远期债券”)
k=1000
l=2000
与ws
对于conta=16至500
如果conta>71且conta<78,则转到下一步“这将跳过第72-77行
如果.Cells(conta,14)=“BDCHFT_MM”,则
.Rows(conta).Copy“您可以一步复制,而无需选择
.Rows(k).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=False,转置:=False'与粘贴相同
k=k+1
Cells(conta,14)=“BAT_TIGO”然后“您也不需要另一个循环来执行此操作,只需要粘贴行的另一个变量
.行(续)。复制
.Rows(l).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
l=l+1
如果结束
下一步:
下一个康塔
以
端接头
即使你说你的代码是从一张纸复制到另一张纸,我也找不到另一张纸,你是从同一张纸复制下面的几行
无论如何,我已经修改了您的代码,因此它不会使用。请选择或。激活,这是您应该避免的。还添加了对工作表的引用,以便您可以在代码中始终引用它,如示例所示
重要的是,使用Option Explicit
强制声明所有变量,否则您将面临许多错误:
Option Explicit
Sub Test()
Dim ws As Worksheet, k As Long, l As Long, conta As Long
'I believe the workbook with the bond forward sheet is not called report, so change the name and include it's extension
Set ws = Workbooks("Report.xlsx").Sheets("bond forward")
k = 1000
l = 2000
With ws
For conta = 16 To 500
If conta > 71 And conta < 78 Then GoTo NextRow 'this will skip the rows 72-77
If .Cells(conta, 14) = "BDCHFT_MM" Then
.Rows(conta).Copy 'you can copy in one step without selecting
.Rows(k).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'same for paste
k = k + 1
ElseIf .Cells(conta, 14) = "BAT_TIGO" Then 'also you don't need another loop to do this, just another variable for the paste row
.Rows(conta).Copy
.Rows(l).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
l = l + 1
End If
NextRow:
Next conta
End With
End Sub
选项显式
子测试()
将ws标注为工作表,k标注为长,l标注为长,conta标注为长
我相信带有债券远期票据的工作簿不是报告,所以请更改名称并包括其扩展名
设置ws=工作簿(“Report.xlsx”).工作表(“远期债券”)
k=1000
l=2000
与ws
对于conta=16至500
如果conta>71且conta<78,则转到下一步“这将跳过第72-77行
如果.Cells(conta,14)=“BDCHFT_MM”,则
.Rows(conta).Copy“您可以一步复制,而无需选择
.Rows(k).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=False,转置:=False'与粘贴相同
k=k+1
Cells(conta,14)=“BAT_TIGO”然后“您也不需要另一个循环来执行此操作,只需要粘贴行的另一个变量
.行(续)。复制
.Rows(l).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
l=l+1
如果结束
下一步:
下一个康塔
以
端接头
跳过循环的最简单方法是使用GoTo
语句编写适当的标志:
Dim firstRowToSkip As Long, lastRowToSkip As Long
firstRowToSkip = 72
lastRowToSkip = 77
For conta = 16 To 500
' skip loop
If conta >= firstRowToSkip And conta <= lastRowToSkip Then GoTo NextIteration
'rest of loop
NextIteration:
Next
将firstRowToSkip变长,将lastRowToSkip变长
firstRowToSkip=72
lastRowToSkip=77
对于conta=16至500
“跳过循环
如果conta>=firstRowToSkip和conta跳过循环的最简单方法是使用GoTo
语句编写适当的标志:
Dim firstRowToSkip As Long, lastRowToSkip As Long
firstRowToSkip = 72
lastRowToSkip = 77
For conta = 16 To 500
' skip loop
If conta >= firstRowToSkip And conta <= lastRowToSkip Then GoTo NextIteration
'rest of loop
NextIteration:
Next
将firstRowToSkip变长,将lastRowToSkip变长
firstRowToSkip=72
lastRowToSkip=77
对于conta=16至500
“跳过循环
如果conta>=firstRowToSkip和conta另一种可能的解决方案:
Option Explicit
Sub test()
Dim k1 As Long, k2 As Long, conta As Long
k1 = 1000
k2 = 2000
With ThisWorkbook.Worksheets("bond forward")
For conta = 16 To 500
If conta > 72 And conta < 77 Then
If .Cells(conta, 14) = "BDCHFT_MM" Then
.Rows(conta).Copy
.Rows(k1).PasteSpecial Paste:=xlPasteValues
k1 = k1 + 1
ElseIf Cells(conta, 14) = "BAT_TIGO" Then
.Rows(conta).Copy
.Rows(k2).PasteSpecial Paste:=xlPasteValues
k2 = k2 + 1
End If
End If
Next conta
End With
End Sub
选项显式
子测试()
尺寸k1为长,k2为长,conta为长
k1=1000
k2=2000
使用此工作簿。工作表(“向前绑定”)
对于conta=16至500
如果conta>72且conta<77,则
如果.Cells(conta,14)=“BDCHFT_MM”,则
.行(续)。复制
.行(k1).粘贴特殊粘贴:=xlPasteValues
k1=k1+1
其他单元格(续,14)=“BAT_TIGO”然后
.行(续)。复制
.行(k2).粘贴特殊粘贴:=XLPasteValue
k2=k2+1
如果结束
如果结束
下一个康塔
以
端接头
另一种可能的解决方案:
Option Explicit
Sub test()
Dim k1 As Long, k2 As Long, conta As Long
k1 = 1000
k2 = 2000
With ThisWorkbook.Worksheets("bond forward")
For conta = 16 To 500
If conta > 72 And conta < 77 Then
If .Cells(conta, 14) = "BDCHFT_MM" Then
.Rows(conta).Copy
.Rows(k1).PasteSpecial Paste:=xlPasteValues
k1 = k1 + 1
ElseIf Cells(conta, 14) = "BAT_TIGO" Then
.Rows(conta).Copy
.Rows(k2).PasteSpecial Paste:=xlPasteValues
k2 = k2 + 1
End If
End If
Next conta
End With
End Sub
选项显式
子测试()
尺寸k1为长,k2为长,conta为长
k1=1000
k2=2000
使用此工作簿。工作表(“向前绑定”)
对于conta=16至500
如果conta>72且conta<77,则
如果.Cells(conta,14)=“BDCHFT_MM”,则
.行(续)。复制
.行(k1).粘贴特殊粘贴:=xlPasteValues
k1=k1+1
其他单元格(续,14)=“BAT_TIGO”然后
.行(续)。复制
.行(k2).粘贴特殊粘贴:=XLPasteValue
k2=k2+1
如果结束
如果结束
下一个康塔
以
端接头
您的答案将粘贴复制到第1000行或第2000行的每一行。在每次迭代中重新启动k1
和k2
变量