EXCEL VBA 函数手册
Abs 函数
返回参数的绝对值,其类型和参数相同。
语法
Abs(number)
必要的 number 参数是任何有效的数值表达式,如果 number 包含 Null,则返
回 Null,如果 number 是未初始化的变量,则返回 0。
说明
一个数的绝对值是将正负号去掉以后的值。例如,ABS(-1) 和 ABS(1) 都返回 1。
Abs 函数示例
本示例使用 Abs 函数计算数的绝对值。
Dim MyNumber
MyNumber = Abs(50.3)
MyNumber = Abs(-50.3)
请参阅:
Sgn 函数、数学函数中的 Abs 函数、Atn 函数、Cos 函数、Exp 函数、Fix 函数、Int 函数、
Log 函数、Rnd 函数、Sgn 函数、Sin 函数、Sqr 函数、Tan 函数、导出的数学函数:
' 返回 50.3。
' 返回 50.3。
导出的数学函数
以下为非基本数学函数的列表,皆可由基本数学函数导出:
函数
由基本函数导出之公式
Secant(正割)
Sec(X) = 1 / Cos(X)
Cosecant(余割)
Cosec(X) = 1 / Sin(X)
Cotangent(余切)
Cotan(X) = 1 / Tan(X)
Inverse Sine (反正弦) Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine (反余弦) Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant (反正割) Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))
Inverse Cosecant (反余
割)
Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Inverse Cotangent (反余
切)
Hyperbolic Sine (双曲正
弦)
Hyperbolic Cosine (双曲
余弦)
Hyperbolic Tangent (双
曲正切)
Hyperbolic Secant (双曲
正割)
Hyperbolic Cosecant(双曲
余割)
Hyperbolic Cotangent(双
曲余切)
Inverse Hyperbolic Sine
(反双曲正弦)
Inverse Hyperbolic Cosine
(反双曲余弦)
Inverse Hyperbolic
Tangent(反双曲正切)
Inverse Hyperbolic Secant
(反双曲正割)
Inverse Hyperbolic
Cosecant
Arccotan(X) = Atn(X) + 2 * Atn(1)
HSin(X) = (Exp(X) - Exp(-X)) / 2
HCos(X) = (Exp(X) + Exp(-X)) / 2
HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
HSec(X) = 2 / (Exp(X) + Exp(-X))
HCosec(X) = 2 / (Exp(X) - Exp(-X))
HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
HArcsin(X) = Log(X + Sqr(X * X + 1))
HArccos(X) = Log(X + Sqr(X * X - 1))
HArctan(X) = Log((1 + X) / (1 - X)) / 2
HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic
Cotangent (反双曲余切)
HArccotan(X) = Log((X + 1) / (X - 1)) / 2
以 N 为底的对数
LogN(X) = Log(X) / Log(N)
Array 函数
返回一个包含数组的 Variant。
语法
Array(arglist)
所需的 arglist 参数是一个用逗号隔开的值表,这些值用于给 Variant 所包含的
数组的各元素赋值。如果不提供参数,则创建一个长度为 0 的数组。
说明
第 2页
用来表示数组元素的符号由变量名、圆括号以及括号中的所需元素的索引号组
成。在下面的示例中,第一条语句创建一个 Variant 的变量 A。第二条语句将
一个数组赋给变量 A。最后一条语句将该数组的第二个元素的值赋给另一个变
量。
Dim A As Variant
A = Array(10,20,30)
B = A(2)
使用 Array 函数创建的数组的下界受 Option Base 语句指定的下界的决定,
除非 Array 是由类型库(例如 VBA.Array )名称限定。如果是由类型库名称限
定,则 Array 不受 Option Base 的影响。
注意 没有作为数组声明的 Variant 也可以表示数组。除了长度固定的字符串以
及用户定义类型之外,Variant 变量可以表示任何类型的数组。尽管一个包含数
组的 Variant 和一个元素为 Variant 类型的数组在概念上有所不同,但对数组
元素的访问方式是相同的。
Array 函数示例
该示例使用 Array 函数来返回一个包含 Variant 的数组。
Dim MyWeek, MyDay
MyWeek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
'返回值假设下界的设置为 1(使用 Option Base
' 语句)。
MyDay = MyWeek(2)
MyDay = MyWeek(4)
'MyDay 的值为 "Tue"。
'MyDay 的值为 "Thu"。
Asc 函数
返回一个 Integer,代表字符串中首字母的字符代码。
语法
Asc(string)
必要的 string 参数可以是任何有效的字符串表达式。如果 string 中没有包含任
何字符,则会产生运行时错误。
说明
在非 DBCS 系统下,返回值范围为 0 – 255 。在 DBCS 系统下,则为 -32768 –
32767。
注意 AscB 函数作用于包含在字符串中的字节数据,AscB 返回第一个字节的字
符代码,而非字符的字符代码。AscW 函数返回 Unicode 字符代码,若平台不
支持 Unicode,则与 Asc 函数功能相同。
Asc 函数示例
本示例使用 Asc 函数返回字符串首字母的字符值(ASCII 值)。
Dim MyNumber
第 3页
MyNumber = Asc("A")
MyNumber = Asc("a")
MyNumber = Asc("Apple")
' 返回 65。
' 返回 97。
' 返回 65。
Atn 函数
返回一个 Double,指定一个数的反正切值。
语法
Atn(number)
必要的 number 参数是一个 Double 或任何有效的数值表达式。
说明
Atn 函数的参数值 (number) 为直角三角形两边的比值并返回以弧度为单位的
角。这个比值是角的对边长度除以角的邻边长度之商。
值的范围在 -pi/2 和 pi/2 弧度之间。
为了将角度转换为弧度,请将角度乘以 pi/180。为了将弧度转换为角度,请将弧
度乘以 180/pi。
注意 Atn 是 Tan 的反三角函数,Tan 的参数值为角度,返回直角三角形的两
条边的比值。不要将 Atn 和余切函数混淆,余切函数值是正切函数值的倒数,
cotangent = (1/tangent)。
Atn 函数示例
本示例使用 Atn 函数计算圆周率。
Dim pi
pi = 4 * Atn(1)
' 计算圆周率。
CallByName 函数
执行一个对象的方法,或者设置或返回一个对象的属性。
语法
CallByName(object, procname, calltype,[args()])
CallByName 函数的语法有以下命名参数:
部分
object
procname
calltype
描述
必需的;变体型(对象)。函数将要执行的对象的名称。
必需的;变体型(字符串)。一个包含该对象的属性名称或者
方法名称的字符串表达式。
必需的;常数。一个 vbCallType 类型的常数,代表正在被调
用的过程的类型。
第 4页
args()
可选的:变体型(数组)。
说明
CallByName 函数用于获取或者设置一个属性,或者在运行时使用一个字符串名
称来调用一个方法。
在下面的例子中,第一行使用 CallByName 来设置一个文本框的 MousePointer
属性,第二行得到 MousePointer 属性的值,第三行调用 Move 方法来移动文
本框:
CallByName Text1, "MousePointer", vbLet, vbCrosshair
Result = CallByName (Text1, "MousePointer", vbGet)
CallByName Text1, "Move", vbMethod, 100, 100
CBool 等类型转换函数
每个函数都可以强制将一个表达式转换成某种特定数据类型。
语法
CBool(expression) CByte(expression) CCur(expression) CDate(expression)
CDbl(expression) CDec(expression) CInt(expression) CLng(expression)
CSng(expression) CStr(expression) CVar(expression)
必要的 expression 参数可以是任何字符串表达式或数值表达式。
返回类型
函数名称决定返回类型,如下所示:
函数
返回类型
expression 参数范围
CBool
Boolean
任何有效的字符串或数值表达式。
CByte
Byte
0 至 255。
CCur
Currency
-922,337,203,685,477.5808 至 922,337,203,685,477.5807。
CDate
Date
CDbl
Double
CDec
Decimal
任何有效的日期表达式。
负数从 -1.79769313486231E308 至
-4.94065645841247E-324;正数从
4.94065645841247E-324 至 1.79769313486232E308。
零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位
小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零
值是 0.0000000000000000000000000001。
第 5页
CInt
CLng
CSng
CStr
CVar
Integer
Long
Single
String
Variant
-32,768 至 32,767,小数部分四舍五入。
-2,147,483,648 至 2,147,483,647,小数部分四舍五入。
负数为 -3.402823E38 至 -1.401298E-45;正数为
1.401298E-45 至 3.402823E38。
依据 expression 参数返回 Cstr。
若为数值,则范围与 Double 相同;若不为数值,则范
围与 String 相同。
说明
如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。
通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为
特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算
发生的情况下,使用 CCur 来强制执行货币运算。
应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据
类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分
隔符和各种货币选项,依据系统的区域设置都会被妥善识别。
当小数部分恰好为 0.5 时,Cint 和 CLng 函数会将它转换为最接近的偶数值。
例如,0.5 转换为 0、1.5 转换为 2。Cint 和 CLng 函数不同于 Fix 和 Int 函
数,Fix 和 Int 函数会将小数部分截断而不是四舍五入。并且 Fix 和 Int 函数
总是返回与传入的数据类型相同的值。
使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来
识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数
字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。
CDate 依据系统上的区域设置来决定日期的格式。如果提供的格式为不可识别
的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有
星期的字符串,也不能被识别。
CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与
CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是
Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate
也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达
到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的
Variant 子类型。
注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值
已经被转换为 Decimal 子类型。
第 6页
' 设置变量初值。
' Check 的值为 True。
' Check 的值为 False。
CBool 函数示例
本示例使用 CBool 函数来将一表达式转成 Boolean 值。如果表达式的结果为
非零的值,CBool 返回 True;否则返回 False。
Dim A, B, Check
A = 5: B = 5
Check = CBool(A = B)
A = 0
' 定义变量。
Check = CBool(A)
CByte 函数示例
本示例使用 CByte 函数将一表达式转成 Byte。
Dim MyDouble, MyByte
MyDouble = 125.5678
MyByte = CByte(MyDouble)
CCur 函数示例
本示例使用 CCur 函数将表达式转成 Currency。
Dim MyDouble, MyCurr
MyDouble = 543.214588
MyCurr = CCur(MyDouble * 2)
' MyDouble 为 Double(双精度)。
' MyDouble 为 Double 类型。
' 将 MyDouble * 2 的结果
' MyByte 值为 126。
' (1086.429176)转换为 Currency (1086.4292)。
' 定义时间。
' 定义日期。
' 转换为 Date 数据类型。
CDate 函数示例
本示例使用 CDate 函数将字符串转换成 Date。一般说来,字符串格式的日期
与时间硬编码(如示例中所示)并不好。较好的做法是使用日期原义表达式和时
间的原义表达式(如 #2/12/1969#,#4:45:23 PM#)。
Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "February 12, 1969"
MyShortDate = CDate(MyDate)
MyTime = "4:35:47 PM"
MyShortTime = CDate(MyTime)
CDbl 函数示例
本示例使用 CDbl 函数将表达式转换为 Double 类型。
Dim MyCurr, MyDouble
MyCurr = CCur(234.456784)
MyDouble = CDbl(MyCurr * 8.2 * 0.01)
CDec 函数示例
该示例使用 CDec 函数将数字值转换为 Decimal。
Dim MyDecimal, MyCurr
MyCurr = 10000000.0587
MyDecimal = CDec(MyCurr)
' 将结果转换为 Double 类型。
' MyCurr 为 Currency 类型。
' MyDecimal 是二进制数。
' 转换为 Date 数据类型。
' MyCurr 是货币。
第 7页
' MyDouble 为 Double 类型。
' MyInt 的值为 2346。
CInt 函数示例
本示例使用 CInt 函数将一数值转换为 Integer。
Dim MyDouble, MyInt
MyDouble = 2345.5678
MyInt = CInt(MyDouble)
CLng 函数示例
本示例使用 CLng 函数将一数值转换为 Long。
Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55
型。
MyLong1 = CLng(MyVal1)
MyLong2 = CLng(MyVal2)
CSng 函数示例
本示例使用 CSng 函数将一数值转换为 Single。
Dim MyDouble1, MyDouble2, MySingle1, MySingle2
' MyDouble1、MyDouble2 均为 Double 类型。
MyDouble1 = 75.3421115: MyDouble2 = 75.3421555
MySingle1 = CSng(MyDouble1)
MySingle2 = CSng(MyDouble2)
CStr 函数示例
本示例使用 CStr 函数将一数值转换为 String。
Dim MyDouble, MyString
MyDouble = 437.324
MyString = CStr(MyDouble)
CVar 函数示例
本示例使用 CVar 函数将表达式转换为 Variant。
Dim MyInt, MyVar
MyInt = 4534
MyVar = CVar(MyInt & "000")
Choose 函数
从参数列表中选择并返回一个值。
' MyInt 为 Integer 类型。
' MySingle1 的值为 75.34211。
' MySingle2 的值为 75.34216。
' MyDouble 为 Double 类型。
' MyString 的内容为“437.324”。
' MyVal1、MyVal2 均为 Double 类
' MyLong1 的值为 25427。
' MyLong2 的值为 25428。
' MyVar 的内容为字符串“4534000”。
语法
Choose(index, choice-1[, choice-2, ... [, choice-n]])
Choose 函数的语法具有以下几个部分:
部分
描述
index
必要参数,数值表达式或字段,它的运算结果是一个数值,且界于 1
第 8页