函数是一个自我包含的完成一定相关功能的执行代码段,就是将要实现的功能进行模块化,它是实现某种功能的算法集合,有助于程序的可重用性。除了EXCEL前端提供的大量函数外,EXCEL VBA也提供了一些便于后台编程的函数,包括字符串、日期、判断等类别的函数。
1、常用函数列表
I、VBA字符串函数
字符串处理是程序设计中最常见的操作,掌握对字符串的处理也是开始学习一种编程语言的开始。VBA提供了两类字符串,即定长和变长字符串。定长字符串声明如下:
Dim str As String * 10
此时,字符串str占用10个字符的内存位置,只能保留10个字符。
变长字符串声明如下:
Dim str As String
这样,字符串str可以保存任意长度字符,字符串长度为为其保存字符的实际数量。
常用字符串列表如下:
|
函数 |
备注 |
|
Trim(string) |
去掉string左右两端空白 |
|
Ltrim(string) |
去掉string左端空白 |
|
Rtrim(string) |
去掉string右端空白 |
|
Len(string) |
计算string长度 |
|
Left(string, x) |
取string左段x个字符组成的字符串 |
|
Right(string, x) |
取string右段x个字符组成的字符串 |
|
Mid(string, start,x) |
取string从start位开始的x个字符组成的字符串 |
|
Ucase(string) |
转换为大写 |
|
Lcase(string) |
转换为小写 |
|
Space(x) |
返回x个空白的字符串 |
|
Asc(string) |
返回一个integer,代表字符串中首字母的字符(ASCII)代码 |
|
Chr(charcode) |
返回string,将字符代码(ASCII码)转换为字符 |
|
InStr([start,] string1, string2, [comp]) |
在字符串string1中查找字符串string2的位置 |
|
InstrRev(string1, string2, [start,] [comp]) |
在字符串string1中反向查找字符串string2的位置 |
|
String(x, string) |
生成指定长度x个重复字符串 |
|
StrConv(string, conv) |
字符串大小写转换和首字母转为大写(conv=1:大小;conv=2:小写;conv=3:首字母大写) |
|
StrComp(string1, string2, [comp]) |
对两个字符串按指定方式进行比较(comp=0:二进制、comp=1:原文;返回值为-1:小于、0:等于、1:大于) |
|
Replace(string, string1, string2, [start,] [len,] [comp,]) |
在字符串string中的string1替换位string2(start:开始位置;len:替换字符数;comp:替换方式) |
注:函数中方括号“[]”中的参数可选
II、VBA日期和时间函数
|
函数 |
备注 |
|
Now() |
返回计算机系统设置的日期和时间 |
|
Date() |
返回当前系统日期 |
|
Time() |
返回前系统时间 |
|
Timer() |
返回一个Single数字,代表从午夜开始到现在经过的秒数 |
|
TimeSerial(hour, minute, second) |
返回一个包含具有具体时、分、秒的时间 |
|
DateDiff(comp, date1, date1) |
返回表示两个指定日期间的时间间隔数目(间隔参数comp=yyyy:年、comp=q:季、comp=m:月、comp=d:日、comp=w:周、comp=h:时、comp=n:分钟、comp=s:秒) |
|
Second(time) |
返回时间的秒数 |
|
Minute(time) |
返回时间的分钟数 |
|
Hour(time) |
返回时间的小时数 |
|
Day(date) |
返回日期变量的日期 |
|
Month(date) |
返回日期变量的月份 |
|
Year(date) |
返回日期变量的年份 |
|
Weekday(date, [firstdayofweek]) |
返回某个日期是星期几(若设firstdayofweek=vbMonday,每周第一天为星期一) |
III、VBA数学函数
|
函数 |
备注 |
|
Abs(x) |
返回x绝对值 |
|
Int(x) |
对x取整 |
|
Sgn(x) |
根据x的值返回-1(x小于零)、0(x等于零)、1(x大于零) |
|
Fix(x) |
返回x的整数部分 |
|
Hex(x) |
返回x的16进制字符 |
|
Oct(x) |
返回x的8进制数值 |
|
Round(x, d) |
按指定位数d四舍五入数值x |
|
Rnd([integer]) |
返回(0,10)随机数 |
|
Sqr(x) |
返回x平方根 |
|
Exp(x) |
返回自然数e的x幂 |
|
Log(x) |
返回以自然数e为底x的对数 |
|
Sin(r) |
正弦函数 |
|
Cos(r) |
余弦函数 |
|
Tan(r) |
正切函数 |
|
Atn(r) |
反正切函数 |
注:三角函数的参数 r 为弧度
IV、VBA转换函数
|
函数 |
备注 |
|
CBool(expression) |
转换为Boolean型 |
|
CByte(expression) |
转换为Byte型 |
|
CCur(expression) |
转换为Currency型 |
|
CDate(expression) |
转换为Date型 |
|
CDbl(expression) |
转换为Double型 |
|
CDec(expression) |
转换为Decemal型 |
|
CInt(expression) |
转换为Integer型 |
|
CLng(expression) |
转换为Long型 |
|
CSng(expression) |
转换为Single型 |
|
CStr(expression) |
转换为String型 |
|
CVar(expression) |
转换为Variant型 |
|
Val(string) |
转换为数据型 |
|
Str(number) |
转换为String |
V、VBA信息函数
|
函数 |
备注 |
|
IsArray(var) |
判断变量var是否为数组 |
|
IsDate(var) |
判断变量var是否为日期型 |
|
IsEmpty(var) |
判断变量var是否初始化 |
|
IsError(var) |
判断表达式是否出错 |
|
IsMissing(var) |
判断(函数)参数是否传递给过程(调用函数时是否引用了某个参数) |
|
IsNull(var) |
是否不包含有效数据(Null) |
|
IsNumeric(var) |
判断变量var是否是数值型 |
|
IsObject(var) |
判断变量var是否是对象型 |
|
TypeName(var) |
返回变量名称 |
|
varType(var) |
返回变量类型系统定义值(如5 - double) |
2、常用函数运用实例
I、字符串样例代码
Dim str As String
Dim str1 As String
Dim str2 As String
str = "lei wang"
str1 = "KEI WANG"
MsgBox "Len = " & Len(str) '显示为8
MsgBox "Left = " & Left(str, 3) '显示为lei
MsgBox "Right = " & Right(str, 4) '显示为wang
MsgBox "Mid = " & Mid(str, 5, 4) '显示为wang
MsgBox "UCase = " & UCase(str) '转为大写,显示为KEI WANG
MsgBox "LCase = " & LCase(str1) '转为小写,显示为lei wang
MsgBox "Asc = " & Asc("A") '显示为ASCII码65
MsgBox "Chr = " & Chr(65) '显示为字符A
str2 = "Hello excel 2007 VBA"
MsgBox "InStr = " & InStr(str2, "e") '显示为位置2
MsgBox "InStr = " & InStr(3, str2, "e") '显示为位置7
MsgBox "InStrRev = " & InStrRev(str2, "e") '显示为位置10
MsgBox "InStrRev = " & InStrRev(str2, "e", 8) '显示为位置7
str1 = "ABCD"
str2 = "abcd"
MsgBox "StrComp = " & StrComp(str1, str2, 1) '显示为0
MsgBox "StrComp = " & StrComp(str1, str2, 0) '显示为-1
MsgBox "StrComp = " & StrComp(str1, str2) '显示为-1
str = "lei wang"
str1 = "KEI WANG"
MsgBox "StrConv = " & StrConv(str1, 1) '显示为lei wang
MsgBox "StrConv = " & StrConv(str, 2) '显示为KEI WANG
MsgBox "StrConv = " & StrConv(str, 3) '显示为Lei Wang
MsgBox Replace(str2, "e", "E") '显示为HEllo ExcEl 2007 VBA
MsgBox Replace(str2, "e", "E", 8, 5) '显示为xEel 2007 VBA
II、日期和时间函数样例代码
MsgBox Now() '显示日期和时间(yyyy-mm-dd hh-mm-ss)
MsgBox Date '显示日期(yyyy-mm-dd)
MsgBox Time() '显示时间(yyyy-mm-dd hh-mm-ss)
MsgBox Timer()
MsgBox TimeSerial(15, 1, 10)
MsgBox DateDiff("w", "2018-10-09", Now())
MsgBox Second(Time())
MsgBox Minute(Time())
MsgBox Hour(Time())
MsgBox Day(Date)
MsgBox Month(Date)
MsgBox Year(Date)
MsgBox Weekday(Date, vbMonday)
III、数学函数样例代码
Dim x As Double
x = 4 * Atn(1) '计算圆周率
MsgBox Application.WorksheetFunction.Pi()
MsgBox Sgn(12) '返回1
MsgBox Hex(12)
MsgBox Oct(12)
MsgBox Round(12.37, 1) '返回12.4
MsgBox Rnd(2)
MsgBox exp(1.2)
MsgBox Log(exp(1)) '返回1
MsgBox Sin(x / 2) '返回1
IV、Like运算符使用方法
可以使用Like运算符来比较两个字符串,其语法格式如下:
语法:
result = string Like pattern
string: 字符串表达式
pattern:字符串表达式,可用通配符、字符表和字符范围
匹配模式pattern如下表:
|
pattern中的字符 |
匹配string中的字符 |
|
? |
任何单一字符 |
|
* |
零个或多个字符 |
|
# |
任何一个数字(0∼∼∼∼9) |
|
[charlist] |
charlist中的任何单一字符 |
|
[!charlist] |
不在charlist中的任何单一字符 |
Like运算符使用方法样例代码:
Dim str As String
str = "Application.RandBetween2345"
MsgBox "aBBBa" Like "a*a" '显示True
MsgBox "RandBetween" Like "*e?n" '显示True
MsgBox 123 Like "??#" '显示True
MsgBox "A" Like "[a-z]" '显示False
MsgBox "A" Like "[A-A]" '显示True
MsgBox "A" Like "[!A-A]" '显示False
MsgBox "" Like "[]" '显示True
MsgBox " " Like "[]" '显示False
V、Format函数使用方法
Excel VBA中Format函数的用法是根据格式表达式中的指令来格式化,其语法格式如下:
语法:
Format(expression, [format,] [firstdayofweek,] [firstweekofyear])
expression:必要参数,任何有效的表达式
format:可选参数,有效的命名表达式或用户自定义格式表达式
firstdayofweek:可选参数,常数,表示一星期的第一天。
firstweekofyear:可选参数,常数,表示一年的第一周。
firstdayofweek参数设置如下表:
|
VBA参数 |
取值 |
备注 |
|
VbSunday |
1 |
星期日(缺省) |
|
vbMonday |
2 |
星期一 |
|
vbTuesday |
3 |
星期二 |
|
vbWednesday |
4 |
星期三 |
|
vbThursday |
5 |
星期四 |
|
vbFriday |
6 |
星期五 |
|
vbSaturday |
7 |
星期六 |
firstweekofyear参数有下面设置:
|
VBA参数 |
取值 |
备注 |
|
vbFirstJan |
1 |
从包含一月一日的那一周开始(缺省) |
|
vbFirstFourDays |
2 |
从本年第一周开始,而此周至少有四天在本年中 |
|
VbFirstFullWeek |
3 |
从本年第一周开始,而此周完全在本年中 |
Format函数使用方法样例代码:
Dim MyTime, MyDate, MyStr
MyTime = #5:04:23 PM#
MyDate = #1/27/1993#
'以系统设置的长时间格式返回当前系统时间
MyStr = Format(Time, "Long Time")
'以系统设置的长日期格式返回当前系统日期
MyStr = Format(Date, "Long Date")
MyStr = Format(MyTime, "h:m:s") '返回 "17:4:23"
MyStr = Format(MyTime, "hh:mm:ss AMPM") '返回 "05:04:23 PM"
MyStr = Format(MyDate, "dddd, mmm d yyyy") '返回 "Wednesday, Jan 27 1993"
'如果没有指定格式,则返回字符串。
MyStr = Format(23) '返回 "23"
'用户自定义的格式。
MyStr = Format(5459.4, "##,##0。00") '返回 "5,459.40"
MyStr = Format(334.9, "###0.00") '返回 "334.90"
MyStr = Format(5, "0.00%") '返回 "500.00%"
MyStr = Format("HELLO", "<") '返回 "hello"
MyStr = Format("This is it", ">") '返回 "THIS IS IT"
VBA可以通过Application对象等调用一些EXCEL前台函数,但在数据量较大时会降低数据数理速度,使用VBA函数数理数组数据会大大提高数据处理效率。