网站首页 > 技术文章 正文
前面各章的实例中或多或少都有用到一些函数,接下来将做一个汇总,对 VBA 中常见函数的分类介绍,涵盖字符串处理、调试、类型转换、数学运算等多个领域,并附有示例说明:
一、字符串处理函数
1. Join
- 作用:将数组元素合并为单个字符串,用指定分隔符连接。
- 完整语法:
Join(array, [delimiter])
参数说明:
- array:必需。要连接的一维数组。
- delimiter:可选。分隔符,默认为空字符串(即空格)。
示例:
Dim arr As Variant
arr = Array("A", "B", "C")
Debug.Print Join(arr, "|") ' 输出 "A|B|C"
2. Split
- 作用:按分隔符将字符串拆分为数组。
- 语法:
Split(expression, [delimiter], [limit], [compare])
参数:
- expression:必需,要拆分的字符串。
- delimiter:可选,分隔符,默认为空格。
- limit:可选,返回的子字符串数量(若为 -1 则返回全部)。
- compare:可选,比较模式(如 vbBinaryCompare 区分大小写)。
示例:
Dim str As String
str = "Apple,Banana,Orange"
Dim fruits() As String
fruits = Split(str, ",", 2) ' 输出数组:["Apple", "Banana,Orange"]
3. InStr
- 作用:返回子字符串在父字符串中的起始位置。
- 语法:
InStr([start], string1, string2, [compare])
参数:
- start:可选,搜索起始位置(默认为 1)。
- string1:必需,父字符串。
- string2:必需,子字符串。
- compare:可选,比较模式(如 vbTextCompare 不区分大小写)。
示例:
Debug.Print InStr(1, "Hello World", "world", vbTextCompare) ' 输出 7
4. Replace
- 作用:替换字符串中的指定子字符串。
- 语法:
Replace(expression, find, replace, [start], [count], [compare])
参数:
- expression:必需,原字符串。
- find:必需,要查找的子字符串。
- replace:必需,替换后的字符串。
- start:可选,起始位置(默认为 1)。
- count:可选,替换次数(默认为全部)。
- compare:可选,比较模式。
示例:
Debug.Print Replace("A1B1C1", "1", "2", 3, 1) ' 输出 "A1B2C1"
5. StrConv
- 作用:转换字符串格式(大小写、全角/半角等)。
- 语法:
StrConv(string, conversion, [LCID])
参数:
- string:必需,原字符串。
- conversion:必需,转换类型常量:
- vbUpperCase:转大写。
- vbLowerCase:转小写。
- vbProperCase:首字母大写。
- vbWide:半角转全角。
- vbNarrow:全角转半角。
- LCID:可选,区域语言 ID(默认为系统设置)。
示例:
Debug.Print StrConv("hello vba", vbProperCase) ' 输出 "Hello Vba"
6. Format
- 作用:格式化字符串或数值(类似 Excel 的 TEXT 函数)。
- 语法:
Format(expression, [format])
参数:
- expression:必需,要格式化的值(数值、日期、字符串)。
- format:可选,格式字符串(如 "Currency"、"yyyy-mm-dd")。
6.1 format 参数设置规则
6.1.1. 预定义格式名称
可直接使用 VBA 内置的格式名称(不区分大小写):
格式名称 | 作用 | 示例(输入:1234.5) |
"Currency" | 货币格式(根据系统区域设置) | "¥1,234.50"(中文环境) |
"Fixed" | 固定小数位(默认2位) | "1234.50" |
"Standard" | 千分位分隔符(默认2位小数) | "1,234.50" |
"Percent" | 百分比格式(乘以100加%) | "123450.00%" |
"Yes/No" | 布尔值转为 "Yes"/"No" | 0 → "No, 非零 → "Yes"` |
示例:
Debug.Print Format(1234.5, "Currency") ' 输出 "¥1,234.50"
6.1.2. 自定义格式字符串
通过组合符号定义输出格式,支持以下占位符:
数字格式化符号
符号 | 说明 | 示例(输入:1234.567) |
0 | 强制显示位数(不足补0) | "00000.0000" → "01234.5670" |
# | 可选显示位数(不足不补0) | "#####.##" → "1234.57" |
. | 小数点位置 | "#.000" → "1234.567" |
, | 千分位分隔符 | "#,###.00" → "1,234.57" |
% | 将数值乘以100并添加% | "0.00%" → "123456.70%" |
; | 分节符(定义正数、负数、零格式) | 见下方示例 |
示例:
Debug.Print Format(1234.567, "#,##0.00") ' 输出 "1,234.57"
Debug.Print Format(0.123, "0.00%") ' 输出 "12.30%"
Debug.Print Format(-1234.5, "#,##0.00;-#,##0.00;Zero") ' 输出 "-1,234.50"
日期时间格式化符号
符号 | 说明 | 示例(输入:Now = 2023-10-01 14:30:00) |
yyyy | 4位年份 | "2023" |
yy | 2位年份 | "23" |
mm | 2位月份(01-12) | "10" |
dd | 2位日期(01-31) | "01" |
hh | 2位小时(12小时制) | "02"(下午2点需结合 AM/PM) |
HH | 2位小时(24小时制) | "14" |
nn | 2位分钟 | "30" |
ss | 2位秒 | "00" |
AM/PM | 上午/下午标识 | "PM" |
"文本" | 直接显示引号内的文本 | "Year: "yyyy → "Year: 2023" |
示例:
Debug.Print Format(Now, "yyyy-mm-dd hh:nn:ss AM/PM") ' 输出 "2023-10-01 02:30:00 PM"
字符串格式化符号
符号 | 说明 | 示例(输入:"Hello") |
@ | 字符占位符(右对齐) | "@@@@" → " Hello" |
& | 字符占位符(左对齐) | "&&&&" → "Hello " |
> | 强制大写 | ">" → "HELLO" |
< | 强制小写 | "<" → "hello" |
示例:
Debug.Print Format("Hello", "@@@@@@") ' 输出 " Hello"
Debug.Print Format("Hello", "&&&&&&") ' 输出 "Hello "
6.1.3. 分节符 ; 的高级用法
可定义不同值的显示格式,语法为:
[正数格式];[负数格式];[零值格式];[空值格式]
示例:
Debug.Print Format(1234.5, "$#,##0.00;-$#,##0.00;Zero;Empty") ' 输出 "$1,234.50"
Debug.Print Format(-1234.5, "$#,##0.00;-$#,##0.00;Zero;Empty") ' 输出 "-$1,234.50"
Debug.Print Format(0, "$#,##0.00;-$#,##0.00;Zero;Empty") ' 输出 "Zero"
6.2 自定义格式的灵活性
- 组合符号:
Debug.Print Format(1234.5, "##,##0.00 ""元""") ' 输出 "1,234.50 元"
- 条件判断:
VBA 的 Format 不支持 Excel 的条件格式(如 [>1000]"High";[<500]"Low";"Medium"),但可通过分节符实现简单逻辑。 - 转义字符:
使用双引号包裹需要直接显示的字符:
Debug.Print Format(0.15, "0.00% ""增长率""") ' 输出 "15.00% 增长率"
6.3 注意事项
- 区域设置影响:
货币符号(Currency)和日期分隔符(如 / 或 -)依赖系统区域设置。
若需固定格式,建议显式定义(如 "¥#,##0.00")。
- 返回值类型:
Format 始终返回字符串类型,需用 CInt/CDbl 等函数转换回数值。 - 性能优化:
频繁调用 Format 可能影响效率,建议在循环外预处理格式字符串。
6.4 综合示例
' 数字格式化
Debug.Print Format(1234567.8912, "#,##0.00") ' 输出 "1,234,567.89"
Debug.Print Format(0.75, "0.00%") ' 输出 "75.00%"
' 日期格式化
Debug.Print Format(Date, "yyyy年mm月dd日") ' 输出 "2023年10月01日"
Debug.Print Format(Now, "hh:nn:ss") ' 输出 "14:30:00"
' 字符串格式化
Debug.Print Format("VBA", ">>>>") ' 输出 " VBA"
Debug.Print Format("text", "<") ' 输出 "text"
' 复杂组合
Debug.Print Format(-1234.5, "$#,##0.00;-$#,##0.00;Zero") ' 输出 "-$1,234.50"
7. StrReverse
- 作用:反转字符串。
- 语法:
StrReverse(string)
参数:
- string:必需,原字符串。
示例:
Debug.Print StrReverse("VBA") ' 输出 "ABV"
8. String
- 作用:生成重复字符的字符串。
- 语法:
String(number, character)
参数:
- number:必需,重复次数。
- character:必需,字符或 ASCII 码。
示例:
Debug.Print String(3, "A") ' 输出 "AAA"
Debug.Print String(3, 65) ' 输出 "AAA"(ASCII 码 65 对应 "A")
9. Space
- 作用:生成指定数量的空格字符串。
- 语法:
Space(number)
参数:
- number:必需,空格数量。
示例:
Debug.Print "A" & Space(3) & "B" ' 输出 "A B"
10. Asc 和 Chr
- 作用:
- Asc:返回字符的 ASCII 码。
- Chr:根据 ASCII 码返回字符。
- 语法:
Asc(string) ' 返回第一个字符的 ASCII 码
Chr(charcode) ' 返回 ASCII 码对应的字符
参数:
- string:必需,单个字符字符串。
- charcode:必需,ASCII 码(0-255)。
示例:
Debug.Print Asc("A") ' 输出 65
Debug.Print Chr(65) ' 输出 "A"
11. InStrRev
- 作用:从字符串末尾开始查找子字符串的位置。
- 语法:
InStrRev(stringcheck, stringmatch, [start], [compare])
参数:
- stringcheck:必需,父字符串。
- stringmatch:必需,子字符串。
- start:可选,起始位置(默认从末尾开始)。
- compare:可选,比较模式。
示例:
Debug.Print InStrRev("apple_pie_pie", "pie") ' 输出 11
12. LCase 和 UCase
- 作用:
- LCase:将字符串转为小写。
- UCase:将字符串转为大写。
- 语法:
LCase(string)
UCase(string)
参数:
- string:必需,原字符串。
示例:
Debug.Print LCase("Hello") ' 输出 "hello"
Debug.Print UCase("Hello") ' 输出 "HELLO"
13. Len 函数
- 作用:返回字符串的字符数(长度)。
- 语法:
Len(string)
参数:
- string(必填):要计算长度的字符串。
示例:
Debug.Print Len("Hello") ' 输出 5
14. Left/Right/Mid 函数
- 作用:截取字符串的指定部分。
- 语法:
- Left(string, length):和Excel中的公式一样的功能
- Right(string, length):和Excel中的公式一样的功能
- Mid(string, start, [length]):和Excel中的公式一样的功能
参数:
- string(必填):原字符串。
- length(必填):要截取的字符数(Left/Right)。
- start(必填):起始位置(Mid)。
- length(可选):截取长度(Mid 中若省略则截取到末尾)。
示例:
Debug.Print Left("VBA", 2) ' 输出 "VB"
Debug.Print Right("Excel", 3) ' 输出 "xel"
Debug.Print Mid("Hello", 2, 3) ' 输出 "ell"
15. Trim/LTrim/RTrim 函数
- 作用:去除字符串两端(或左/右侧)的空格。
- 语法:
- Trim(string)
- LTrim(string)
- RTrim(string)
参数:
- string(必填):原字符串。
示例:
Debug.Print Trim(" VBA ") ' 输出 "VBA"
Debug.Print LTrim(" VBA ") ' 输出 "VBA "
总结
以上补充覆盖了 VBA 中主要字符串处理函数的详细参数及用法,适合以下场景:
- 数据清洗:使用 Replace、Trim、Split 处理不规则数据。
- 格式转换:通过 StrConv、Format 统一字符串格式。
- 编码处理:借助 Asc、Chr 处理 ASCII 字符。
- 反向查找:利用 InStrRev 从末尾定位子字符串。
实际编码时需注意参数的可选性(如 Split 的 limit)和比较模式(如 vbTextCompare 忽略大小写),以提高代码健壮性。
- 上一篇: 实现《英雄联盟》 PLAY 按键
- 下一篇: 告别繁琐,VB代码搞定自定义文件属性
猜你喜欢
- 2025-05-25 菜籽饼窝料自制秘方!三步搞定野钓爆护神器,鲫鲤草鱼通杀
- 2025-05-25 将DeepSeek接入WPS,只要三步
- 2025-05-25 一文搞懂 VBA 循环结构,附超实用应用方案!
- 2025-05-25 Deepseek嵌入Excel,帮你自动做表格,感觉我要失业了
- 2025-05-25 怎么样获取剪贴板中格式的类型,VBA编程教你这样操作
- 2025-05-25 tdlex是什么文件
- 2025-05-25 2分钟教你学会Word接入deepseek
- 2025-05-25 Word接入DeepSeek方法:第二版解决宏消失保存失败。
- 2025-05-25 玩家将11年前的英伟达GTX 970显卡改造升级8GB显存
- 2025-05-25 VBA如何获取电脑磁盘信息,这个方法一定要知道
- 05-25菜籽饼窝料自制秘方!三步搞定野钓爆护神器,鲫鲤草鱼通杀
- 05-25将DeepSeek接入WPS,只要三步
- 05-25一文搞懂 VBA 循环结构,附超实用应用方案!
- 05-25Deepseek嵌入Excel,帮你自动做表格,感觉我要失业了
- 05-25怎么样获取剪贴板中格式的类型,VBA编程教你这样操作
- 05-25tdlex是什么文件
- 05-252分钟教你学会Word接入deepseek
- 05-25Word接入DeepSeek方法:第二版解决宏消失保存失败。
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)