Excel 删除后在单元格上循环传送
我一直在做一个项目,现在已经到了最后一步,我希望最后一段代码能够删除所有不以25、26或27开头的行Excel 删除后在单元格上循环传送,excel,vba,Excel,Vba,我一直在做一个项目,现在已经到了最后一步,我希望最后一段代码能够删除所有不以25、26或27开头的行 For Each cell In Worksheets("Sheet2").Range("A:A") If Left(CStr(cell.Value), 2) <> 25 And Left(CStr(cell.Value), 2) <> 26 And Left(CStr(cell.Value), 2) <> 27 Then
For Each cell In Worksheets("Sheet2").Range("A:A")
If Left(CStr(cell.Value), 2) <> 25 And Left(CStr(cell.Value), 2) <> 26 And Left(CStr(cell.Value), 2) <> 27 Then
matchRow = cell.Row
Rows(matchRow & ":" & matchRow).Select
Selection.Delete Shift:=xlDown
工作表(“表2”)中每个单元格的。范围(“A:A”)
如果左(CStr(单元格数值),2)25和左(CStr(单元格数值),2)26和左(CStr(单元格数值),2)27,则
matchRow=单元格。行
行(匹配行&“:”&匹配行)。选择
选择。删除移位:=xlDown
结果并不像人们希望的那样:一些细胞在运行后仍然存在。
我认为用这种方法,当我删除一个单元格时,它会改变周期,跳过下一个单元格
如何防止这种情况发生?要删除行,最好从底部开始,然后向上移动
Dim cell As Range
Dim lastrow As Long
Dim counter1 As Long
lastrow = Cells.Find(what:="*", searchorder:=xlByRows,
searchdirection:=xlPrevious).Row
For counter1 = lastrow To 1 Step -1
Select Case Left(CStr(Cells(counter1, 1).Value), 2)
Case 25, 26, 27
Cells(counter1, 1).EntireRow.Delete
End Select
Next counter1
只有一些“附加组件”:1)“单元格(计数器1,1)。EntireRow.Delete”可以简化为“行(计数器1)。删除“2”案例25,26,27“可以简化为“案例25到27”注意:单元格。查找(what:=“*”,…)
将返回无任何内容,并使链接的行成员调用放大(错误91)如果在空纸上使用。有关防弹解决方案,请参阅。此外,无论是否启用了Application.EnableEvents
(尽管禁用应用程序事件可以使其完成得更快),这样的迭代单元格速度很慢,效率也很低。有更好的方法。不仅仅是从底部开始并向上运行“好”,这是唯一可靠的方法(如果您在行中循环…)