VB 函数
按类别整理的内置函数速查:字符串、数学、日期、类型、数组、格式化。
字符串
| Function | Returns | Note |
|---|---|---|
Len(s) | 字符数 | 中文字符算 1 |
Left(s, n) | 前 n 个字符 | n 超过长度返回整串 |
Right(s, n) | 后 n 个字符 | |
Mid(s, start, len) | 从 start 起 len 个 | start 从 1 开始 |
InStr(s, sub) | 位置,找不到 0 | 从 1 开始 |
InStrRev(s, sub) | 最后一个位置 | |
Replace(s, a, b) | 新字符串 | 全部替换 |
Split(s, d) | 数组 | 返回 0 基数组 |
Join(arr, d) | 字符串 | |
Trim(s) | 两端去空格 | LTrim / RTrim 单边 |
UCase / LCase | 转换后字符串 | |
String(n, c) | n 个 c 组成 | String(3, "-") → --- |
StrReverse(s) | 倒序字符串 |
Dim s
s = "VBScript is easy"
WScript.Echo Len(s) ' 16
WScript.Echo Left(s, 8) ' VBScript
WScript.Echo Mid(s, 10, 2) ' is
WScript.Echo InStr(s, "easy") ' 13
WScript.Echo Replace(s, "easy", "fun")
WScript.Echo UCase(Left(s, 8))
WScript.Echo String(5, "-")
WScript.Echo StrReverse("abc")16
VBScript
is
13
VBScript is fun
VBSCRIPT
-----
cbaMid's start index is 1, not 0; Mid(s, 0, 2) raises an error. This trips up anyone coming from JavaScript's substring or Python slicing.
数学
| Function | Returns | Note |
|---|---|---|
Abs(n) | 非负数 | |
Int(n) | ≤ n 的整数 | 负数向下 |
Fix(n) | 去掉小数部分 | 负数向上 |
Round(n, d) | d 位小数 | 银行家舍入 |
Sqr(n) | ||
Rnd() | 0–1 之间 | 需先 Randomize |
Int(Rnd()*n)+1 | 1–n |
WScript.Echo Int(3.7) ' 3
WScript.Echo Int(-3.7) ' -4
WScript.Echo Fix(-3.7) ' -3
WScript.Echo Round(2.5) ' 2(银行家舍入)
WScript.Echo Round(3.5) ' 4
WScript.Echo Round(1.2345, 2) ' 1.23
Randomize
WScript.Echo Int(Rnd() * 100) + 13
-4
-3
2
4
1.23
(1–100 之间的随机整数)Round(2.5) yields 2, not 3: VBScript uses banker's rounding (round half to even). That matches accounting practice but not intuition; for conventional rounding use Int(x + 0.5).
日期
| Function | Returns | Example |
|---|---|---|
Now() | Date + Time | 2026/11/3 14:25:09 |
Date() / Time() | 各自部分 | |
Year / Month / Day | 数字 | 2026 / 11 / 3 |
Hour / Minute / Second | 数字 | 14 / 25 / 9 |
Weekday(d) | 1–7(周日=1) | |
DateAdd(u, n, d) | 新日期 | DateAdd("d", 7, Date()) |
DateDiff(u, d1, d2) | 数字 | DateDiff("d", d1, d2) |
DatePart(u, d) | 数字 | DatePart("q", d) |
DateSerial(y,m,d) | 日期 | DateSerial(2026,11,3) |
Dim d
d = DateSerial(2026, 11, 3)
WScript.Echo Year(d) & "-" & Month(d) & "-" & Day(d)
WScript.Echo DateAdd("d", 30, d)
WScript.Echo DateDiff("d", d, DateSerial(2027, 1, 1))
WScript.Echo DatePart("q", d)2026-11-3
2026/12/3
59
4DateAdd units are strings: "yyyy", "q", "m", "d", "h", "n" (minutes!), "s". Note "m" is months and "n" is minutes — a trap nearly everyone hits.
类型与判断
| Function | Purpose |
|---|---|
CStr(v) | CStr(123) → "123" |
CInt(v) | 范围 −32768..32767 |
CLng(v) | 范围更大 |
CDbl(v) | 小数 |
CDate(v) | 字符串转日期 |
CBool(v) | 0 假,非 0 真 |
IsNull(v) | 明确的无值 |
IsEmpty(v) | 声明未赋值 |
IsNumeric(v) | 能否当数字 |
IsDate(v) | 能否当日期 |
IsArray(v) | |
IsObject(v) | |
TypeName(v) | "Integer" 等 |
WScript.Echo CInt("42") + 1
WScript.Echo IsNumeric("abc")
WScript.Echo IsNumeric("3.14")
WScript.Echo TypeName(Now())
WScript.Echo CDate("2026-11-03")43
False
True
Date
2026/11/3CInt on an out-of-range value raises an overflow error rather than promoting to a long. Use CLng or CDbl for large values, and guard with IsNumeric to avoid type-mismatch errors.
格式化
WScript.Echo FormatNumber(1234.5, 2) ' 1,234.50
WScript.Echo FormatCurrency(1234.5) ' ¥1,234.50
WScript.Echo FormatPercent(0.256, 1) ' 25.6%
WScript.Echo FormatDateTime(Now(), 2) ' 2026-11-03
WScript.Echo FormatDateTime(Now(), 1) ' 2026年11月3日1,234.50
¥1,234.50
25.6%
2026-11-03
2026年11月3日FormatCurrency and FormatNumber follow the system locale: the same script prints ¥1,234.50 on Chinese Windows and possibly $1,234.50 on English. Never rely on these for data exchange — store the raw value and format only for display.字符串
| 函数 | 返回 | 注意 |
|---|---|---|
| 长度 | 字符数 | 中文字符算 1 |
| 左取 | 前 n 个字符 | n 超过长度返回整串 |
| 右取 | 后 n 个字符 | |
| 中间取 | 从 start 起 len 个 | start 从 1 开始 |
| 查找 | 位置,找不到 0 | 从 1 开始 |
| 反向查找 | 最后一个位置 | |
| 替换 | 新字符串 | 全部替换 |
| 拆分 | 数组 | 返回 0 基数组 |
| 合并 | 字符串 | |
| 去空格 | 两端去空格 | LTrim / RTrim 单边 |
| 大小写 | 转换后字符串 | |
| 重复 | n 个 c 组成 | String(3, "-") → --- |
| 反转 | 倒序字符串 |
Dim s
s = "VBScript is easy"
WScript.Echo Len(s) ' 16
WScript.Echo Left(s, 8) ' VBScript
WScript.Echo Mid(s, 10, 2) ' is
WScript.Echo InStr(s, "easy") ' 13
WScript.Echo Replace(s, "easy", "fun")
WScript.Echo UCase(Left(s, 8))
WScript.Echo String(5, "-")
WScript.Echo StrReverse("abc")16
VBScript
is
13
VBScript is fun
VBSCRIPT
-----
cbaMid 的起始位置从 1 开始,不是 0。Mid(s, 0, 2) 会报错。这是从 JavaScript 的 substring 或 Python 切片转过来最容易出错的地方。
数学
| 函数 | 返回 | 注意 |
|---|---|---|
| 绝对值 | 非负数 | |
| 取整 | ≤ n 的整数 | 负数向下 |
| 取整 | 去掉小数部分 | 负数向上 |
| 四舍五入 | d 位小数 | 银行家舍入 |
| 平方根 | ||
| 随机数 | 0–1 之间 | 需先 Randomize |
| 随机整数 | 1–n |
WScript.Echo Int(3.7) ' 3
WScript.Echo Int(-3.7) ' -4
WScript.Echo Fix(-3.7) ' -3
WScript.Echo Round(2.5) ' 2(银行家舍入)
WScript.Echo Round(3.5) ' 4
WScript.Echo Round(1.2345, 2) ' 1.23
Randomize
WScript.Echo Int(Rnd() * 100) + 13
-4
-3
2
4
1.23
(1–100 之间的随机整数)Round(2.5) 得到 2 不是 3——VBScript 用银行家舍入(四舍六入五取偶)。财务计算里这符合规范,但和多数人的直觉不同。要传统四舍五入得自己写 Int(x + 0.5)。
日期
| 函数 | 返回 | 示例 |
|---|---|---|
| 当前日期时间 | Date + Time | 2026/11/3 14:25:09 |
| 日期 / 时间 | 各自部分 | |
| 年月日 | 数字 | 2026 / 11 / 3 |
| 时分秒 | 数字 | 14 / 25 / 9 |
| 星期几 | 1–7(周日=1) | |
| 加减 | 新日期 | DateAdd("d", 7, Date()) |
| 差值 | 数字 | DateDiff("d", d1, d2) |
| 取部分 | 数字 | DatePart("q", d) |
| 构造日期 | 日期 | DateSerial(2026,11,3) |
Dim d
d = DateSerial(2026, 11, 3)
WScript.Echo Year(d) & "-" & Month(d) & "-" & Day(d)
WScript.Echo DateAdd("d", 30, d)
WScript.Echo DateDiff("d", d, DateSerial(2027, 1, 1))
WScript.Echo DatePart("q", d)2026-11-3
2026/12/3
59
4DateAdd 的单位是字符串:"yyyy"、"q"、"m"、"d"、"h"、"n"(分钟!)、"s"。注意 "m" 是月、"n" 才是分钟——这个坑几乎每个人都踩过。
类型与判断
| 函数 | 用途 |
|---|---|
| 转字符串 | CStr(123) → "123" |
| 转整数 | 范围 −32768..32767 |
| 转长整 | 范围更大 |
| 转双精度 | 小数 |
| 转日期 | 字符串转日期 |
| 转布尔 | 0 假,非 0 真 |
| 是 Null | 明确的无值 |
| 是 Empty | 声明未赋值 |
| 是数字 | 能否当数字 |
| 是日期 | 能否当日期 |
| 是数组 | |
| 是对象 | |
| 类型名 | "Integer" 等 |
WScript.Echo CInt("42") + 1
WScript.Echo IsNumeric("abc")
WScript.Echo IsNumeric("3.14")
WScript.Echo TypeName(Now())
WScript.Echo CDate("2026-11-03")43
False
True
Date
2026/11/3CInt 超出范围会报「溢出」,不是自动提升为长整。大数值用 CLng 或 CDbl。转换前用 IsNumeric 判断能避免「类型不匹配」错误。
格式化
WScript.Echo FormatNumber(1234.5, 2) ' 1,234.50
WScript.Echo FormatCurrency(1234.5) ' ¥1,234.50
WScript.Echo FormatPercent(0.256, 1) ' 25.6%
WScript.Echo FormatDateTime(Now(), 2) ' 2026-11-03
WScript.Echo FormatDateTime(Now(), 1) ' 2026年11月3日1,234.50
¥1,234.50
25.6%
2026-11-03
2026年11月3日FormatCurrency / FormatNumber 的输出受系统区域设置影响。同一段脚本在中文 Windows 上输出 ¥1,234.50,在英文系统上可能是 $1,234.50。跨机器运行时不要依赖这些格式做数据交换——用 CStr 存原值,只在显示时格式化。