Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1380|回复: 5

[已解决]奇怪了,为什么到最后总会留下一行没删除

[复制链接]
发表于 2021-9-19 23:28 | 显示全部楼层 |阅读模式
Sub 删除已过期()

Dim rng As Range

For Each rng In Range("B1:B" & Range("a65536").End(3).Row)
If rng.Value = "已过期" Then


rng.Select
Rows(Selection.Row).Resize(Selection.Rows.Count).Delete

End If

Next
End Sub


是哪里出错了吗?

最佳答案
2021-9-22 08:53
本帖最后由 风林火山 于 2021-9-22 08:54 编辑

Sub RowDel()
      Dim k As Integer
      For k = Cells(Rows.Count, 2).End(3).Row To 1 Step -1
            If Cells(k, 2).Value = "已过期" Then Cells(k, 2).EntireRow.Delete
      Next k
End Sub

这个就是lisongmei老师的思路

已过期的行总是会留一下.zip

11.99 KB, 下载次数: 2

发表于 2021-9-20 00:40 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-9-20 12:39 | 显示全部楼层
lisongmei 发表于 2021-9-20 00:40
删除行请从后往前

具体怎么操作?感觉我要换个思路了
回复

使用道具 举报

发表于 2021-9-20 13:04 | 显示全部楼层
热心答疑者 发表于 2021-9-20 12:39
具体怎么操作?感觉我要换个思路了

具体就是从后往前啊:这里不要用for each in .用for i = n to 1 step -1的方式来循环,就可以了。。

回复

使用道具 举报

发表于 2021-9-22 08:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风林火山 于 2021-9-22 08:54 编辑

Sub RowDel()
      Dim k As Integer
      For k = Cells(Rows.Count, 2).End(3).Row To 1 Step -1
            If Cells(k, 2).Value = "已过期" Then Cells(k, 2).EntireRow.Delete
      Next k
End Sub

这个就是lisongmei老师的思路
回复

使用道具 举报

 楼主| 发表于 2021-9-24 22:52 | 显示全部楼层
感谢lisongmei和风林火山老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 09:27 , Processed in 0.294464 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表