vba 里面 instr 函数核心作用就是在一段字符串里面,查找指定子字符串第一次出现的起始位置,返回的结果是数字序号,如果没有找到目标字符,函数就返回 0,这个函数是 excel vba 里面最常用的文本处理函数,经常用来拆分文本 判断是否包含关键字 提取分隔符前后内容,很多初学者容易混淆 instr 和 instrrev,instr 是从字符串左边开始往右查找,instrrev 是从右边往左边查找,同时 instr 还支持设置起始查找位置,也可以选择区分大小写或者不区分大小写,写代码的时候如果参数顺序写错,程序就会报错,这个是新手最常见错误,instr 函数在 excel access wps vba 环境都可以正常使用,适合批量处理单元格文本,比如按逗号 横线 空格分割内容,是文本类自动化脚本必备函数。
函数语法格式
InStr ([start], string1, string2, [compare])
参数说明
start 可选参数,代表从第几个字符开始查找,默认是从 1 也就是第一个字符开始
string1 必选参数,原始完整字符串,也就是被查找的母串
string2 必选参数,想要查找的目标子字符串
compare 可选参数,指定比较方式,vbBinaryCompare 区分大小写,vbTextCompare 不区分大小写
参数对照表
| 参数 | 是否必填 | 含义 | 常用取值 |
|---|---|---|---|
| start | 可选 | 查找起始位置 | 正整数,默认 1 |
| string1 | 必填 | 原始母字符串 | 单元格内容或者变量文本 |
| string2 | 必填 | 待查找子串 | 要定位的关键字 |
| compare | 可选 | 比较模式 | vbBinaryCompare 0 区分大小写,vbTextCompare 1 不区分大小写 |
返回值规则
找到子串,返回子串第一个字符在母串里面的位置数字
没有找到子串,返回 0
如果 string2 是空字符串,返回 start 参数设定的起始位置
如果 string1 是空字符串,返回 0
分步代码示例
基础示例 不设置起始位置,默认从第一位查找
Dim pos As Long
pos = InStr ("hello world", "o")
代码执行之后 pos 的值是 5,也就是字母 o 第一次出现的位置
示例 指定起始查找位置,跳过前面已经找到的字符
pos = InStr (7, "hello world", "o")
从第 7 位开始查找,找到后面的 o,返回 8
示例 不区分大小写查找
pos = InStr (1, "Hello World", "W", vbTextCompare)
这个写法可以识别大写 H 里面的小写 w,不会因为大小写差异查找失败
实战案例 按逗号拆分单元格文本
Dim s As String, p As Long
s = "苹果,香蕉,橙子"
p = InStr (s, ",")
If p > 0 Then
MsgBox Left (s, p - 1)
End If
这段代码就是利用 instr 找到逗号位置,再配合 left 函数提取逗号前面的内容
易错要点清单
第一 参数顺序不能颠倒,很多人把 string1 和 string2 写反,导致结果错误
第二 区分大小写默认是开启的,也就是默认 vbBinaryCompare,查找的时候大小写不一样就识别不到,需要忽略大小写必须加上 compare 参数
第三 下标是从 1 开始计数,不是从 0 开始,这个和很多编程语言不一样,是 vba 特点
第四 instr 只返回第一次出现的位置,如果需要查找所有出现位置,需要循环不断更新 start 参数继续查找
第五 区分 instr 和 instrrev,instr 从左向右,instrrev 从右向左,不要混用
综合掌握 vba 中 instr 函数的使用方法,记住它是从左向右查找子串首次位置,掌握四个参数含义,理解返回 0 代表未找到,熟练搭配 left mid right 函数做文本拆分,写批量文本处理 vba 代码的时候就可以灵活调用这个函数。
【常见问题】
问题 1 vba 中 instr 函数查找不到内容返回什么
回答 1 vba 中 instr 函数如果没有找到目标子串,会返回数字 0,写代码的时候可以根据这个返回值判断字符串是否包含关键字。
问题 2 vba 中 instr 函数默认区分大小写吗
回答 1 vba 中 instr 函数默认是区分大小写,如果想让 vba 中 instr 函数忽略大小写,需要在参数里面加入 vbTextCompare。
问题 3 vba 中 instr 和 instrrev 有什么区别
回答 1 vba 中 instr 函数是从左向右查找子串第一次出现位置,instrrev 是从右向左查找,学习 vba 中 instr 函数使用方法的时候,一定要分清这两个函数查找方向。
【免责申明】
本内容仅为 vba 函数学习参考,不同版本 excel wps 的 vba 环境存在细微差异,请结合实际软件版本测试代码。


