VBA 字符串操作函数 & Opera职权范围
⚡ 智能摘要
VBA字符串操作函数和 Opera扭矩组合、测量和执行trac在 Excel 宏中处理文本。本页解释了连接运算符、LEFT、RIGHT、MID、Len 和 InStr 函数、拆分和合并操作,以及最常导致字符串代码出错的错误。

VBA 字符串 Opera职权范围
字符串数据用于保存由数字、字符和符号组成的数据。“Jul-2015”就是一个字符串数据的示例。它由以下部分组成:
- 人物 (七月)
- 象征 (-)
- Numbers (2015)
字符串运算符用于操作字符串数据。例如,你可以将月份和年份的前 2015 个字母连接起来,得到 3 年 2015 月的值,如“Jul-XNUMX”。
下表显示了连接 VBA 字符串运算符。
| S / N | Opera器 | 描述 | 例如: | 输出 |
|---|---|---|---|---|
| 1 | & | 连接:此运算符用于将字符串连接在一起 | “约翰”和“多伊” | 迈克.Chen |
示例来源 Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
执行上述代码会产生以下结果
和号并不是唯一用于连接文本的符号,而一旦涉及到数字,两者之间的区别就显得尤为重要。
字符串连接中 & 和 + 的区别
VBA 接受两个文本值之间使用 & 符号和 + 符号,因此初学者常常将它们视为可以互换使用。但当其中一个操作数是数字或空值时,它们的行为就会有所不同,只有其中一种是安全的。
| 行为 | &(&符号) | +(加号) |
|---|---|---|
| 两个文本值 | 加入他们:“Guru“和“99”返回 Guru99 | 加入他们:“Guru“+99”返回 Guru99 |
| 文本和数字 | 将数字转换为文本:“年龄”& 30 返回“年龄 30” | 引发类型不匹配错误 |
| 两个数字字符串 | “10”和“5”返回105 | “10” + “5” 可能相加并返回 15 |
| 空值 | 将 Null 视为空字符串 | 返回空值并丢弃整个结果 |
💡提示: 始终使用 & 符号进行字符串连接,而将加号 (+) 保留用于其他用途。 算术运算在 & 符号前后各加一个空格,因为 VBA 会将 Total& 读取为 Long 类型声明字符。
VBA 字符串操作函数
VBA 字符串操作是 Excel VBA 用于宏编程 和字符串操作。Excel 提供了各种类型的 VBA 字符串操作函数,例如:
- 左:用于trac字符串左侧的 t 个字符
- 右:用于trac字符串右侧的 t 字符
- 中:用于trac从字符串中间截取子字符串
- 莱恩: 用于查找字符串的长度
- 指令: 用于查找字符串中子字符串的位置
- 修剪: 用于删除字符串两端的空格
- 更换:用于将一个子字符串中出现的所有实例替换为另一个子字符串。
- UCase / LCase:用于将字符串转换为大写或小写
下表显示了每个函数的语法以及一个示例,因此您可以直接将模式复制到宏中。
| 功能 | 句法 | 例如: | 输出 |
|---|---|---|---|
| 左 | 左(字符串,长度) | 左(“2015年7月”,3) | 七月 |
| 右 | 右(字符串,长度) | 右(“2015年7月”,4) | 2015 |
| 中 | 中间(字符串,起始位置,长度) | Mid(“2015年7月”,5,4) | 2015 |
| 莱恩 | 字符串长度 | Len(“2015年7月”) | 8 |
| 指令 | InStr(start, string, substring) | InStr(1, “2015 年 7 月”, “-“) | 4 |
| 修剪 | 修剪(字符串) | 修剪(” Guru99“) | Guru99 |
| 更换 | 替换(字符串,查找,替换) | 替换(“2015 年 7 月”、“-”、“/”) | 2015月/XNUMX日 |
| 尿路感染 | UCase(字符串) | UCase(“guru99”) | 古鲁99号 |
下面这个宏结合了其中几个函数,可以根据日期标签的各个部分重新构建日期标签。
Sub StringFunctionsDemo() Dim Source As String Dim MonthPart As String Dim YearPart As String Source = "July-2015" ' Take the first three characters MonthPart = Left(Source, 3) ' Take the last four characters YearPart = Right(Source, 4) MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions" End Sub
运行宏后会显示 Jul-2015。每个函数都会返回一个新值,并且不会修改原始字符串,因此可以将结果安全地合并到一个表达式中。
这些函数每次都只能处理一个字符串。当单个值包含整个列表时,另外两个函数处理起来更合适。
如何在 VBA 中拆分和合并字符串
粘贴到 Excel 中的数据通常是一个长字符串,每个项目之间用分隔符分隔,例如“百事可乐、可口可乐、芬达、果汁”。使用 MID 和 InStr 函数读取这种字符串既慢又不稳定。VBA 提供了一对专门用于此目的的函数。
分裂 接受一个分隔符字符串,并返回一个从零开始的数组,每个元素代表一个项目。 加入 它的作用相反,接受一个数组,并返回一个元素之间用分隔符分隔的字符串。请注意,Join 函数作用于数组,而不是两个独立的字符串。
Sub SplitAndJoinDemo() Dim Source As String Dim Items() As String Dim i As Long Source = "Pepsi,Coke,Fanta,Juice" ' Break the value into an array on every comma Items = Split(Source, ",") For i = LBound(Items) To UBound(Items) Sheet1.Cells(i + 1, 1).Value = Items(i) Next i ' Rebuild the list with a different separator MsgBox Join(Items, " | "), vbOKOnly, "Joined List" End Sub
循环会将每种饮料写入工作表中的单独一行,然后消息框会显示“百事可乐 | 可口可乐 | 芬达 | 果汁”。以下三点使这种模式在生产代码中可靠:
- 以零为基准的结果: 无论 Option Base 设置为何值,Split 始终返回一个从 0 开始编号的数组,因此请使用 LBound 和 UBound 而不是固定数字来驱动循环。
- 声明为 String(): 将结果赋值给一个动态字符串数组。如果先声明数组大小为固定值,则会导致编译错误。
- 输入为空: 分割空字符串会返回一个没有元素的数组,因此在读取 Items(0) 之前,请先使用 UBound 进行测试。
即使选择了正确的函数,字符串代码也会以少数可预测的方式失效。
常见的VBA字符串错误及其修复方法
Excel VBA 中的大多数字符串错误都源于少数几种原因。识别出这些症状可以节省大量调试时间。
- 连接时类型不匹配: 文本和数字之间使用了加号(+)。请将其替换为 & 符号,这样数字会自动转换。
- InStr 返回 0: 未找到子字符串。InStr 在失败时返回 0 而不是 -1,因此在将结果传递给 Mid 之前,请先检查值是否大于零。
- 中间或左侧的无效过程调用: 请求的长度为负数,或者起始位置小于 1。使用 Len 来保护调用,使长度永远不会超过字符串。
- 应该匹配但却不匹配的比较结果: 导入数据中的尾随空格会导致相等性错误。请使用 Trim 函数将等式两边换行,并在需要忽略大小写时使用 StrComp 函数。
- 不会转换成数字的文本: 由于分隔符的存在,像“1,200”这样的值在算术运算中会出错。在用 CLng 转换之前,请先用 Replace 函数去除分隔符。
下载包含上述代码的 Excel


