查看: 6|回复: 0

excel小技巧——用vba代码批量多条件查询筛选excel表

[复制链接]

1

主题

0

回帖

0

积分

积极分子

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-11-19
发表于 2025-7-19 18:46:00 | 显示全部楼层 |阅读模式

需求

    筛选excel表单数据,筛选条件为一组电话号码
   一般思路,是通过Critl+F快捷键,调出查找和替换选项框,通过手动输入的形式一个个对照着电话号码输入到表单中,然后通过比较一个个筛选出来,过程过于繁琐

vba 脚本

    excel表格自带了开发工具,可用通过vba脚本的形式,实现批量筛选

前置工作

    默认情况下,excel是不会显示开发工具选项的,首先要调出该选项

步骤:
文件选项自定义功能区勾选上开发工具,即可显现该功能选项卡

image

开发工具选项卡上点击Visual Basic就可以调出编辑器,进行代码编写
或者使用快捷键 Alt+F11

需求1:批量查询数据

需求:
假设根据一组电话号码,剔除出源数据表单中与之对应的行
筛选条件组:

  • 电话号码
    13001791310
    13011722206
    13011771600
    13011775361
    13011777627
    13011778063
    13011782456
    13011784149
    13011789450
    13012741471
    13012744466
    13012749111

操作思路

  • 将筛选条件(电话号码)放在新的表中(假设命名为sheet2),新建表作为输出数据表(sheet3),假设源数据表单为sheet1
  • 通过For循环,比较sheet1和sheet2,属性(列)电话不相等的元组(行),则输入到sheet3中

参考vba脚本

Sub 批量查询()
Dim 表1行, 表2行, 行, 列 As Integer
Dim 矢量 As Boolean
'清理表3数据
Sheet3.Range("A2:C200").Clear
行 = 2

'筛选条件查询
For 表1行 = 2 To Sheet1.Rows.Count
矢量 = False
'查询区域循环
    For 表2行 = 2 To Sheet2.Rows.Count
        If Sheet1.Cells(表1行, "B") = Sheet2.Cells(表2行, "B") Then
        矢量 = True
        Exit For
        End If
    If Cells(表2行, "B") = "" Then 表2行 = Rows.Count
    Next 表2行

'输入区域循环
    If 矢量 = False Then
        For 列 = 1 To 3
        Sheet3.Cells(行, 列) = Sheet1.Cells(表1行, 列)
        Next 列
    Else
        行 = 行 - 1
    End If
行 = 行 + 1
If Cells(表1行, "B") = "" Then 表1行 = Rows.Count
Next 表1行
End Sub

需求2:多条件批量查询

需求:
① 在需求1的基础上,加入姓名、性别等条件都要一致的需求

操作思路

类似电话筛选条件,只需要在控制sheet2的筛选条件就可以,即IF多加几个条件,可以使用and 关键字做多条件查询

  • 增加循环,例如姓名
 If Sheet1.Cells(表1行, "B") = Sheet2.Cells(表2行, "B") and _
 Sheet1.Cells(表1行, "A") = Sheet2.Cells(表2行, "A") Then
        矢量 = True
        Exit For
        End If


来源:https://www.cnblogs.com/bingo39/p/18975996
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部