不使用循环实现T2:T200范围内条件删行并保留特定公式行的VBA方案咨询
不使用循环实现T2:T200范围内条件删行并保留特定公式行的VBA方案咨询
嘿,我完全get到你的需求了——你想在T2到T200这个范围内删掉真正的空白单元格所在的行,但要好好保留那些单元格里是空文本""(不管是手动输入的还是公式返回的),或者是公式输出1/safe的行,而且还不想用循环来实现,对吧?
先给你拆解一下你原来的代码:你的Range("T2:T200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete其实已经接近需求了,但有个小问题需要补上——如果范围内没有任何真正的空白单元格,运行这段代码会直接报错。
优化后的最终代码
Sub remove_blankrows() ' 先开启错误捕获,避免无空白单元格时报错 On Error Resume Next ' 只选中T2:T200里完全空白(无内容、无公式)的单元格,删除对应整行 Range("T2:T200").SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' 恢复默认错误处理机制 On Error GoTo 0 End Sub
为什么这个方案能满足你的要求?
我给你掰扯清楚关键逻辑:
xlCellTypeBlanks这个参数只会选中完全空白的单元格——也就是既没有输入任何内容,也没有公式的单元格。- 那些带公式的单元格(比如你提到的
=if(b2<>"",1,"")或者=if(b2<>"","safe","")),哪怕公式返回的是空文本"",也不属于“空白单元格”范畴,所以不会被选中删除。 - 手动输入了空文本
""的单元格,本质上也有内容(只是显示为空),同样不会被SpecialCells(xlCellTypeBlanks)识别,所以对应的行也会被保留。
这样一来,既不用写循环拖慢运行速度,又精准地保留了你想保护的行,完美符合你的需求~
备注:内容来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

