excel小技巧——用vba代码批量多条件查询筛选excel表
<h1 id="需求">需求</h1><p> 筛选excel表单数据,筛选条件为一组<code>电话号码</code><br>
一般思路,是通过<code>Critl+F</code>快捷键,调出<code>查找和替换</code>选项框,通过手动输入的形式一个个对照着<code>电话号码</code>输入到表单中,然后通过比较一个个筛选出来,过程过于繁琐</p>
<h1 id="vba-脚本">vba 脚本</h1>
<p> excel表格自带了开发工具,可用通过vba脚本的形式,实现批量筛选</p>
<h2 id="前置工作">前置工作</h2>
<p> 默认情况下,excel是不会显示<code>开发工具</code>选项的,首先要调出该选项</p>
<blockquote>
<p>步骤:<br>
<code>文件</code> → <code>选项</code> → <code>自定义功能区</code>勾选上开发工具,即可显现该功能选项卡</p>
</blockquote>
<p><img src="https://img2024.cnblogs.com/blog/2185532/202507/2185532-20250710001938044-2040927530.png" alt="image" loading="lazy"><br>
在<code>开发工具</code>选项卡上点击<code>Visual Basic</code>就可以调出编辑器,进行代码编写<br>
或者使用快捷键 <code>Alt+F11</code></p>
<h2 id="需求1批量查询数据">需求1:批量查询数据</h2>
<blockquote>
<p><strong>需求:</strong><br>
假设根据一组电话号码,剔除出源数据表单中与之对应的行<br>
<strong>筛选条件组:</strong></p>
<ul>
<li>电话号码<br>
13001791310<br>
13011722206<br>
13011771600<br>
13011775361<br>
13011777627<br>
13011778063<br>
13011782456<br>
13011784149<br>
13011789450<br>
13012741471<br>
13012744466<br>
13012749111</li>
</ul>
</blockquote>
<h3 id="操作思路">操作思路</h3>
<ul>
<li>将筛选条件(电话号码)放在新的表中(假设命名为sheet2),新建表作为输出数据表(sheet3),假设源数据表单为sheet1</li>
<li>通过For循环,比较sheet1和sheet2,属性(列)<code>电话</code>不相等的元组(行),则输入到sheet3中</li>
</ul>
<h3 id="参考vba脚本">参考vba脚本</h3>
<pre><code class="language-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
</code></pre>
<h2 id="需求2多条件批量查询">需求2:多条件批量查询</h2>
<blockquote>
<p><strong>需求:</strong><br>
① 在需求1的基础上,加入姓名、性别等条件都要一致的需求</p>
</blockquote>
<h3 id="操作思路-1">操作思路</h3>
<p>类似<code>电话</code>筛选条件,只需要在控制sheet2的筛选条件就可以,即<code>IF</code>多加几个条件,可以使用<code>and</code> 关键字做多条件查询</p>
<ul>
<li>增加循环,例如<code>姓名</code></li>
</ul>
<pre><code class="language-vba"> If Sheet1.Cells(表1行, "B") = Sheet2.Cells(表2行, "B") and _
Sheet1.Cells(表1行, "A") = Sheet2.Cells(表2行, "A") Then
矢量 = True
Exit For
End If
</code></pre><br><br>
来源:https://www.cnblogs.com/bingo39/p/18975996
頁:
[1]