VBA 字符串操作函数 & Opera职权范围

⚡ 智能摘要

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

  • 🔤 字符串数据: 由字符、符号和数字组成的值,例如文本 Jul-2015。
  • 级联 OperaTOR: & 符号连接两个字符串,所以“John” & “Doe”返回 John Doe。
  • ✂️ Extrac功能: Left、Right 和 Mid 分别从值的开头、结尾或中间提取子字符串。
  • 📏 测量功能: Len 计算字符数,InStr 返回子字符串的起始位置。
  • 🧩 拆分和合并: Split 将一个分隔符字符串拆分成一个数组,而 Join 将数组重新组合成一个字符串。
  • ⚠️ 常见错误: 类型不匹配、InStr 返回零以及末尾空格是导致大多数比较失败的原因。

VBA字符串操作函数和 Opera职权范围

VBA 字符串 Opera职权范围

字符串数据用于保存由数字、字符和符号组成的数据。“Jul-2015”就是一个字符串数据的示例。它由以下部分组成:

  • 人物 (七月)
  • 象征 (-)
  • Numbers (2015)

字符串运算符用于操作字符串数据。例如,你可以将月份和年份的前 2015 个字母连接起来,得到 3 年 2015 月的值,如“Jul-XNUMX”。

下表显示了连接 VBA 字符串运算符。

S / N Opera器 描述 例如: 输出
1 & 连接:此运算符用于将字符串连接在一起 “约翰”和“多伊” 迈克.Chen

示例来源 Code

VBA 字符串 Opera示例来源 Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

执行上述代码会产生以下结果

VBA 字符串 Opera示例来源 Code

和号并不是唯一用于连接文本的符号,而一旦涉及到数字,两者之间的区别就显得尤为重要。

字符串连接中 & 和 + 的区别

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

下载上述Excel表格 Code

常见问题

可变长度字符串最多可容纳约 20 亿个字符,而固定长度字符串最多可容纳 65,400 个字符。但是,工作表单元格只能存储 32,767 个字符,因此写入工作表时,较长的值会被截断。

等号默认区分大小写进行比较。要进行不区分大小写的比较,请使用 `StrComp(a, b, vbTextCompare)`,或者在模块顶部添加 `Option Compare Text` 来更改整个模块的默认设置。

& 符号会将每个操作数转换为文本后再进行连接,因此 10 & 5 返回字符串 105。保持值是数值并先将它们相加,如果需要在消息中显示结果,则先将结果连接起来。

是的。请描述输入和期望输出,例如:trac在第一个破折号之前的代码中,AI 助手会返回一个 Left 和 InStr 表达式。针对诸如缺少破折号之类的极端情况进行测试。

是的。粘贴一个嵌套表达式,例如包含 InStr 的 Mid,人工智能助手会将其分解成多个步骤,为每个参数命名,并标记 InStr 返回零且调用失败的情况。

总结一下这篇文章: