Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除后在单元格上循环传送_Excel_Vba - Fatal编程技术网

Excel 删除后在单元格上循环传送

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

我一直在做一个项目,现在已经到了最后一步,我希望最后一段代码能够删除所有不以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
            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
(尽管禁用应用程序事件可以使其完成得更快),这样的迭代单元格速度很慢,效率也很低。有更好的方法。不仅仅是从底部开始并向上运行“好”,这是唯一可靠的方法(如果您在行中循环…)