优秀的编程知识分享平台

网站首页 > 技术文章 正文

Excel常用技能分享与探讨(5-宏与VBA简介 VBA常用到的函数一)

nanyue 2025-05-25 14:32:57 技术文章 1 ℃

前面各章的实例中或多或少都有用到一些函数,接下来将做一个汇总,对 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 忽略大小写),以提高代码健壮性。

Tags:

最近发表
标签列表