实例需求:工作表Data中A3单元格开始保存原始数据,第一行为要查找的关键数字,如果该列数据不包含指定数字,那么删除該单元格,并且单元格上移补充空位,结果如工作表Result所示。
需要注意的是:例如A4单元格内容为“14*0”,这并不包括关键数字“1”,只包含数字“14”和“0”。
原始数据中数字是以星号间隔,那么使用split函数拆分,然后针对拆分后的数组元素,再逐个判断进行删除即可,用VBA实现这个并不算什么难题。
如下示例代码展示如何快速查找,和快速删除单元格。
Sub demo()
akey = Range("A1:K1")
arr = [a3].CurrentRegion
For k = 1 To UBound(arr)
For j = 1 To 11
If VBA.InStr(1, "*" & arr(k, j) & "*", "*" & akey(1, j) & "*") = 0 Then arr(k, j) = ""
Next j
Next k
With [a3].CurrentRegion
.Value = arr
.SpecialCells(4).Delete shift:=xlUp
End With
End Sub
【代码解析】
第1行代码将关键数字读取到数组中。
第2行代码将原始数据读到数组中。
第4~8循环处理每个数据。
第6行代码用于判断单元格数据是否关键数字,如果不包含则InStr
函数返回值为0,则清空数据元素(如果直接清空单元格,那么将影响代码执行效率)。
直接使用InStr
函数无法实现全词(完整数字)匹配,因此需要对原始数据略处理。以A4单元格为例,其内容为“14*0”。
SpecialCells
方法查找单元格,参数值4代表空单元格,然后使用Delete
方法删除单元格,shift参数设置为xlUp
,则下方单元格上移。总结一下知识点:
InStr
一次查找即可实现全词匹配SpecialCells
方法定位单元格,一次性删除,提升代码效率