• 快速删除包含指定数字的数据


    实例需求:工作表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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    【代码解析】
    第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方法定位单元格,一次性删除,提升代码效率
  • 相关阅读:
    清华架构师带领20位大厂专家耗时三年整理出这份2000页Java进阶指南
    软件卸载quickuninstall
    Python的整数是如何实现
    走进国产机器人领军品牌华数机器人,共探数字化变革魔力
    Callback详解
    Onvif协议及协议测试工具使用详解
    Shell 正则及其命令
    用HTML+CSS+JS做一个漂亮简单的公司网站(JavaScript期末大作业)
    【安信可ESP-12K模组】
    MobLink后台基本配置
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/127646520