示例
如图所示,该表为某公司采购清单。由于在记录时并未标记供应商来源地,只能通过E列供应商名称中寻找。现需要筛选出所有上海的供应商采购记录,该如何用VBA实现?
| 商品编码 | 入库日期 | 部门 | 业务员 | 供应商 | 数量 | 单价 | 金额 |
| GXGY023 | 2009/1/1 | 采购部 | 刘清 | 上海照明公司 | 200 | 41.88 | 8376.07 |
| GXGY024 | 2009/1/1 | 采购部 | 刘清 | 上海照明公司 | 100 | 23.93 | 2393.16 |
| QDJC022 | 2009/2/20 | 采购部 | 刘清 | 天津气动有限公司 | 20 | 18.8 | 376.07 |
| qdjc023 | 2009/2/20 | 采购部 | 刘清 | 天津气动有限公司 | 1 | 330.77 | 330.77 |
| QDJC028 | 2009/2/20 | 采购部 | 刘清 | 天津气动有限公司 | 20 | 12.82 | 256.41 |
| SBCS001 | 2009/2/16 | 市场部 | 杨洪兴 | 宁夏输送设备公司 | 6 | 20000 | 120000 |
| GXGY025 | 2009/2/16 | 市场部 | 张精 | 南京电子有限公司 | 175 | 38.46 | 6730.77 |
| SBKY002 | 2009/2/20 | 采购部 | 马一鸣 | 安徽中国工厂 | 4 | 13490.08 | 53960.3 |
| SBKY003 | 2009/2/20 | 采购部 | 马一鸣 | 安徽中国工厂 | 7 | 8547.25 | 59830.74 |
| SBLG001 | 2009/2/20 | 采购部 | 马一鸣 | 安徽中国工厂 | 3 | 3046.15 | 9138.46 |
| SBQG001 | 2009/2/20 | 采购部 | 马一鸣 | 安徽中国工厂 | 7 | 1609.26 | 11264.85 |
| SBKY001 | 2009/2/20 | 采购部 | 马一鸣 | 安徽中国工厂 | 4 | 17094.02 | 68376.07 |
| JXBL001 | 2009/4/28 | 采购部 | 刘清 | 天津市装饰经营部 | 50 | 11.4 | 570 |
| JXBL002 | 2009/4/28 | 采购部 | 刘清 | 天津市装饰经营部 | 40 | 11.4 | 456 |
| GXGY032 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 24.79 | 1239.32 |
| GXGY016 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 39.32 | 1965.81 |
| GXGY027 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 100 | 35.9 | 3589.74 |
| GXGY017 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 45.3 | 2264.96 |
| GXGY028 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 45.3 | 2264.96 |
| GXGY029 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 45.3 | 2264.96 |
| GXGY030 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 200 | 46.15 | 9230.77 |
| GXGY033 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 100 | 35.9 | 3589.74 |
| GXGY031 | 2009/4/28 | 采购部 | 刘清 | 上海照明公司 | 50 | 49.57 | 2478.63 |
| QDQG005 | 2009/4/28 | 采购部 | 刘清 | 天津ACCP(中国)公司 | 5 | 1495.73 | 7478.63 |
| GXXJ006 | 2009/4/28 | 研发部 | 林秋雨 | 天津市器材有限公司 | 75 | 752.14 | 56410.26 |
| SBBJHY001 | 2009/4/28 | 采购部 | 刘清 | 天津市轴承销售有限公司 | 60 | 2.99 | 179.49 |
| SBBJHY002 | 2009/4/28 | 采购部 | 刘清 | 天津市轴承销售有限公司 | 1046 | 2.56 | 2682.05 |
实现代码
Option Explicit
Sub 筛选包含某字符的记录()
Dim rown As Long
'显示所有记录
Cells.Rows.Hidden = False
For rown = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(1, Cells(rown, "E").Value, "上海") = 0 Then
'不含“上海”则隐藏
Rows(rown).Hidden
End If
Next
End Sub
Instr函数
判断某个文本(字符串)中是否包含某字符时,除了可以使用Like运算符(或者工作表函数Find外,在VBA中还提供了另一个函数Instr。当文本中包含某个字符时,Instr返回该字符所在位置的序号,若不包含,则返回0。Instr函数的语法为
InStr([start,] stringl,string2 [,compare ])
- 参数start表示查找的起始位置,该参数可以省略,然而当指定了compare参数时,该参数必填。
- 参数string1表示被搜索的文本(字符串),即在哪里查找。
- 参数string2表示需要查找的字符。
- 参数compare为字符串的比较方式,当该参数省略时,则比较方式为Option Compare语句所指定的比较方式。该参数可以为表中的任意常量。
compare参数
|
常 量 |
值 |
说 明 |
|
vbUseCompareOption |
-1 |
使用Option Compare语句设置执行—个比较 |
|
vbBinaryCompare |
0 |
执行一个二进制比较 |
|
vbTextCompare |
1 |
执行一个按照原文的比较 |
|
vbDatabaseCompare |
2 |
仅适用于Microsoft Access,执行一个基于数据库中信息的比较 |
InstrRev函数
Instr函数是以从左至右的方向在接受搜索的文本(字符串)中查找是否包含某字符,VBA还提供了一个类似的函数InstrRev。该函数以从右至左的方向进行搜索,其语法为
InstrRev(stringl,string2 [,start [,compare])
- 参数stringl表示接受搜索的文本(字符串),即在哪里查找。
- 参数string2表示需要查找的字符。
- 参数start表示接受查找的文本从string1开始至第几位,若省略或者设置为-1,则表示查找整个string1。如以下表达式中,设置了start参数为4,由于string1的前四位为"1234”,在该文本(字符串)内找不到5,因而返回0。
InstrRev("12345","5",4)
- 参数compare为字符串的比较方式,当该参数省略时,则比较方式为Option Compare语句所指定的比较方式。
这篇博客介绍了如何使用VBA的Instr和InstrRev函数来检查文本中是否包含特定字符。通过举例说明如何筛选出包含特定词汇的供应商记录,解释了这两个函数的用法和参数含义,帮助用户理解VBA中的文本搜索技巧。
&spm=1001.2101.3001.5002&articleId=115715396&d=1&t=3&u=361d492ec1ba4ae5b362a8094a7dc06f)

被折叠的 条评论
为什么被折叠?



