ExceVBA删除指定字符所在的行_优化版 |
---|
=====start====
3.ExcelVBA文件操作-获取文件夹(含子文件夹)所有文件列表(优化版)
=====end====
【问题】
在实际工作中,要删除含有某字符的所在的行,如果数据不多,手工可以完成,如果数据量多,用前面的的文章:ExcelVBA删除包含指定字符所在的行用Find、FindNext,再删除,新的问题:如果sheet多,每个表是上w的数据,跑起来也很卡。 |
---|
【思路】
所以用了把用Exce的替换方法,批量替换“字符”为"#DIV/0!",再用.SpecialCells(xlCellTypeConstants, 16)的方法快速定位。再delete,速度快了,效率高了 |
---|
【代码】
Sub yhd_ExceVBA删除指定字符所在的行_优化版()
Dim dic As Object, dicRng As Range
Dim Rngs As Range, rn As Range
Set dic = CreateObject("scripting.dictionary")
With Worksheets("Sheet1 (2)")
.Cells.Replace What:="缺考", Replacement:="#DIV/0!", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Set Rngs = .UsedRange.SpecialCells(xlCellTypeConstants, 16)
' Rngs.EntireRow.Delete
'当数据有两个在同一行时以上代码出错,于是用了下面的代码
For Each rn In Rngs
dic(rn.Row) = ""
Next
Debug.Print Rngs.Count, dic.Count
Set dicRng = .Rows(dic.keys()(0))
For i = 1 To dic.Count - 1
Set dicRng = Union(dicRng, .Rows(dic.keys()(i)))
Next
dicRng.Delete
End With
End Sub
Sub 构结数据用的()
For Each sht In Worksheets
With sht
For i = 1 To 10
r = Excel.Application.WorksheetFunction.RandBetween(2, 184)
c = Excel.Application.WorksheetFunction.RandBetween(3, 11)
.Cells(r, c) = "缺考"
Next i
j = j + 1
.Name = "Sheet" & j
End With
Next
End Sub
以上代码是在一个工作表中进行测试,如果要多个工作加上
for each sht in sheets,就可以啦
【效果】
一键,完美,效率,几十表,几W数据,几秒 |
---|
如果对你有帮助,请转发给更多人学习
=====学习笔记=====
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有