实例需求:工作表Data中A3单元格开始保存原始数据,第一行为要查找的关键数字,如果该列数据不包含指定数字,那么删除該单元格,并且单元格上移补充空位,结果如工作表Result所示。
需要注意的是:例如A4单元格内容为“14*0”,这并不包括关键数字“1”,只包含数字“14”和“0”。

vfp如何删除字段内的空格_删除单元格

原始数据中数字是以星号间隔,那么使用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”。

  • 将数据扩展为“*14*0*”,即首尾分别增加一个星号
  • 关键数字安装同样规则扩展为“1
  • 使用Instr函数进行查找
    使用这个方法可是完成全词匹配,并且仅需要一次查找即可完成。
    第10行代码将处理后的数据会写到单元格区域中。
    第11行代码使用SpecialCells方法查找单元格,参数值4代表空单元格,然后使用Delete方法删除单元格,shift参数设置为xlUp,则下方单元格上移。

总结一下知识点:

  1. 使用数据数组处理数据,避免多次读写单元格,提升代码效率
  2. 通过数据扩展,InStr一次查找即可实现全词匹配
  3. 使用SpecialCells方法定位单元格,一次性删除,提升代码效率