ExcelVBA学习总结-内置函数
了解VBA与Excel内置的函数,能够使我们处理起任务来事半功倍。这些函数不仅使⽤⽅便,⽽且效率⼀般都⽐较⾼(有些是例外的,特别是某些⼯作表函数),⽐我们⾃⼰写的要⾼效的多。
1. VBA内置的函数
VBA内置函数是VBA种可以直接使⽤的函数,很多处理函数也相当有⽤。
调⽤⽅式:直接使⽤函数,或者使⽤VBA调⽤。例如Shell()或者VBA.Shell()。
VBA内置的函数主要涉及以下⼏类:
测试类函数:
IsNumeric(x) - 是否为数字, 返回Boolean结果。
IsDate(x) - 是否是⽇期, 返回Boolean结果。
IsEmpty(x) - 是否为Empty, 返回Boolean结果。
IsArray(x) - 指出变量是否为⼀个数组。
IsError(expression) - 指出表达式是否为⼀个错误值。
IsNull(expression) - 指出表达式是否不包含任何有效数据 (Null)。
IsObject(identifier) - 指出标识符是否表⽰对象变量。
数学函数:
Sin(X)、Cos(X)、Tan(X)、Atan(x) - 三⾓函数,单位为弧度。
Log(x)、Exp(x) - 返回x的⾃然对数,指数。
Abs(x) - 返回x的绝对值。
Int(number)、Fix(number) - 都返回参数的整数部分,区别:Int 将 -8.4 转换成 -9,⽽ Fix 将-8.4 转换成 -8。
Sgn(number) - 返回⼀个 Variant (Integer),指出参数的正负号。
Sqr(number) - 返回⼀个 Double,指定参数的平⽅根。
VarType(varname) - 返回⼀个 Integer,指出变量的⼦类型。
Rnd(x) - 返回0-1之间的单精度数据,x为随机种⼦。
Round(x,y) - 把x四舍五⼊得到保留y位⼩数的值。
字符串函数:
Trim(string)、Ltrim(string)、Rtrim(string) - 去掉string左右两端空⽩,左边的空⽩,右边的空⽩。
Len(string) - 计算string长度
Replace(expression,find,replace) - 替换字符串。
Left(string, x)、Right(string, x)、Mid(string, start,x) - 取string左/右/指定段x个字符组成的字符串
Ucase(string)、Lcase(string) - 转换字符串为⼤、⼩写
Space(x) - 返回x个空⽩的字符串
Asc(string) - 返回⼀个 integer,代表字符串中⾸字母的字符代码
Chr(charcode) - 返回 string,其中包含有与指定的字符代码相关的字符
InStr() - 返回⼀个字符串在另外⼀个字符串中的位置,返回值为Variant(Long)型。
转换函数:
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
时间函数:
Now、Date、Time - 返回⼀个 Variant (Date),根据计算机系统设置的⽇期和时间来指定⽇期和时间。
Timer - 返回⼀个 Single,代表从午夜开始到现在经过的秒数。
TimeSerial(hour, minute, second) - 返回⼀个 Variant (Date),包含具有具体时、分、秒的时间。
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) - 返回 Variant (Long) 的值,表⽰两个指定⽇期间的时间间隔数⽬。Second(time) - 返回⼀个 Variant (Integer),其值为 0 到 59 之间的整数,表⽰⼀分钟之中的某个秒。
Minute(time) - 返回⼀个 Variant (Integer),其值为 0 到 59 之间的整数,表⽰⼀⼩时中的某分钟。
Hour(time) - 返回⼀个 Variant (Integer),其值为 0 到 23 之间的整数,表⽰⼀天之中的某⼀钟点。
Day(date) - 返回⼀个 Variant (Integer),其值为 1 到 31 之间的整数,表⽰⼀个⽉中的某⼀⽇
Month(date) - 返回⼀个 Variant (Integer),其值为 1 到 12 之间的整数,表⽰⼀年中的某⽉。
Year(date) - 返回 Variant (Integer),包含表⽰年份的整数。
Weekday(date, [firstdayofweek]) - 返回⼀个 Variant (Integer),包含⼀个整数,代表某个⽇期是星期⼏。
其它常⽤函数:
Shell - 运⾏⼀个可执⾏的程序。
InputBox - 这个太熟悉了,简单输⼊对话框。这个需要注意与Application.InputBox(更强⼤,内置容错处理,选择取消后返回false)区分,⽽这个函数不含有容错处理,⽽且选择取消后返回空串(零个字节的字符串)。
MsgBox - 这个更不⽤说了,简单信息显⽰对话框,其实也是⼀种简单的输⼊⼿段。
Join - 连接数组成字符串。
Split - 拆分字符串成数组。
RGB - 返回指定R、G、B分量的颜⾊数值。
Dir - 查⽂件或者⽂件夹。
IIF(expression, truePart, falsePart) - IF语句的“简化版本”(⽐喻,当然并不⼀样);expression为true的话返回truePart,否则返回falseParth。Choose(index, choice1,...choiceN) - 选择指定Index的表达式,Index可选范围是1到选项的总数。datediff是字符型函数
Switch(exp1,value1,exp2,value2,...expN,valueN) - 从左⾄右计算每个exp的值,返回⾸先为true的表达式对应的value部分。如果所有的exp 值都不为true,则返回Null。注意虽然只返回⼀个部分,但是这⾥所有的表达式exp1到expN都是要被计算的,实际使⽤中要注意这个副作⽤。
部分内容来⾃下⾯的连接,感谢楼主的⽆私奉献。⼤家⼊门学学还是很不错的,推荐⼀下:
2. WorksheetFunction⼯作表函数
WorksheetFunction⼯作表函数是Excel内置的处理函数,计算功能相当强⼤。
调⽤⽅式:Application.WorksheetFunction或者直接WorksheetFunction。例如Application.WorksheetFunction.Max()或者WorksheetFunction.Max()。
VBA内置的函数是⽤于处理程序数据的,是为VB语⾔服务的,所有VBA宿主环境都可以使⽤这些内置的功能。但是对于Worksheet中的对象,似乎这些通⽤的函数并不能提供最佳的实践。所以针对Sheet,⼜存在另外⼀套相关的处理函数,虽然它们与VBA中的某些函数作⽤是⼀样的,但是从“⼯作表函数”这个名字上就可以看出,对于⼯作表中的对象的所有操作,⽐如对单元格求和,求单元格中最⼤值等,使⽤⼯作表函数必将具有先天的优势(当然了,⼯作表函数基本上都是可以在Excel单元格中直接输⼊“=”然后就可以使⽤的)。虽然从实际的操作中,我们可能发现,使⽤内置的⼯作表函数并不⼀定是最快,最⾼效的,但⽆疑是最直接,最省事的。
这⾥简单总结⼀下常⽤的⼏类函数。全部的函数说明参见⽂末的MSDN链接。
数学函数类:
BesselI(贝塞尔函数) BesselJ BesselK BesselY Power(指数) Log(对数,还有以不同) In(⾃然对数) Fact(阶乘) FactDouble(半数阶乘,意思就是偶数的只计算偶数阶乘,奇数的只奇数奇数阶乘) PI(圆周率)
弦值计算类:
Acos Acosh Asin Asinh Atan2 Atanh Cosh Sinh Tanh
数制转换类:
Bin2Dec Bin2Hex Bin2Oct Dec2Bin Dec2Hex Dec2Oct Hex2Bin Hex2Dec Hex2Oct Oct2Bin Oct2Dec Oct2Hex Degrees与Radians(弧度⾓度互换).
数值处理类:
Ceiling(arg1,arg2) - 数值舍⼊处理,把arg1舍⼊处理成arg2的最接近的倍数(⼤于等于传⼊的参数)。
Floor(arg1,arg2) - 数值舍⼊处理,把arg1舍⼊处理成arg2的最接近的倍数(⼩于等于传⼊的参数)。
Round - 按指定的位数四舍五⼊,返回类型是Double。
MRound - 按指定位数四舍五⼊,参数是Variant,返回类型是Double.
RoundDown - 舍去指定位数后⾯的⼩数,总是⼩于等于传⼊的参数,其它的基本同Round。
RoundUp - 舍去指定位数后的⼩数总是进1,总是⼤于等于传⼊的参数,其它的基本同Round。
Fixed - 按指定的位数四舍五⼊,返回类型是String,可以指定显⽰不显⽰逗号(第三个参数决定,False则显⽰逗号,True则不显⽰逗号). Odd - 返回⽐参数⼤的最接近的奇数。
Even - 返回⽐参数⼤的最接近的偶数。
数值运算类:
Average AverageIf AverageIfs Max Min Large Small Sum SumIf SumIfs SumProduct SumSq SumX2MY2 SumX2MY2 SumX2PY2 SumXMY2 Count CountA CountBlank CountIf CountIfs
Frequency - 计算第⼆个数组的每个元素在第⼀个数组中出现的次数,返回⼀个与第⼆个数组同长的⼀个数组。⼀般参数和返回值都是Range。
Lcm - 计算数值的最⼩公倍数。
Product - 返回所有参数的乘积。
Quotient - 返回两个数整除的值,忽略余数。
逻辑判断类:
And - 如果所有参数都为True,则返回True;只要有⼀个返回False,则返回False。
Or - 如果所有参数都为False,则返回False;只要有⼀个返回True,则返回True。
IsErr - 检查是不是除了#N/A外的错误值.
IsError - 检查是不是错误值(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?,或者 #NULL!).
IsEven - 检查是否是偶数.
IsOdd - 检查是否是奇数.
IsLogical - 检查是不是布尔值.
IsNA - 检查值是否是错误值#N/A(值不可⽤)。
IsNonText - 检查是否是⾮⽂本(空的单元格返回true)。
IsNumber - 检查是不是数字。
IsText - ⼀般⽤于判断单元格中内容是否是⽂本。
Delta - 判断两个Variant的值是否相等,相等则返回1,否则返回0。
数据操作类:
Choose - 返回第⼀个参数Index指定的值. 与VBA内置的函数Choose有类似的功能。
Asc - 把双字节字符变成单字节字符。
Lookup,VLookup,HLookup - 查单元格数组中与给定值相同的值,⽂本等等。
Match - 查并返回单元格数组中与指定值相同的单元格的相对Index值。
Find,FindB,Search,SearchB - 返回第⼀个字符串在第⼆个字符串中的位置(位置是从1开始的,不是基于0的)。
Replace,ReplaceB - 字符串替换,可以指定开始的位置以替换的字符数,控制更为精细。
Substitute - 直接进⾏字符串替换,不需要指定开始位置,可控性差,但是使⽤简单。
Rept - 按照指定次数的重复构造字符串并返回。
Text - 按照⼀定的格式把值转换成⽂本。
Index - ⼀般⽤于返回⼀组单元格中某块区域中某⾏某列的值。
Median - 计算⼀个Double的数值,这个数值将参数分为相同数⽬两组,⼀组⽐这个值⼤,⼀组⽐这个值⼩。这个值可能正好出现在参数中,也可能不出现在这些参数中。
Mode - 返回传⼊的数组,或⼀组值中出现次数最多的值.
Prope - 格式化字符串中的每个单词,把⾸字母转成⼤写,其它的转成⼩写。
RandBetween - 返回介于两个数之间的随机数,返回值为Double型。
Rank- 返回指定的数在⼀个Range对象值中排过序后的位置(可以⽤第三个参数指定按降序或升序排,默认是降序),⽐如单元格d1到d4的值为(1,4,3,4),那么4的Rank值就是1(忽略第三个参数是按降序第⼀个匹配,然后返回位置)。
Transpose - 把⼀个数组的⾏列互换,这个⽅法主要是针对单元格的,所以数组的长度(<65535),和每个元素的长度(<255)都有限制。如果这个⽅法由于这些因素失败了,可以尝试⼀下这个⽅案:。
Trim - 移除单词之间多余的空格,只保留⼀个;字符串开头和结尾的空格也会全部移除。
Weekday - 返回指定⽇期是星期⼏,⽤Double值表⽰,范围默认是从1 (Sunday)到7(Saturday)。
WeekNum - 返回指定⽇期是⼀年中的第⼏周。
基本上以Variant为参数的函数都是可以直接传⼊单元格的。
以B结尾的函数代表是推荐使⽤于双字节的字符语⾔的,⽐如汉⼦,⽇语等。不以B结尾的函数代表的是推荐使⽤于单字节字符语⾔的,例如英语,德语等。对于不同的语⾔,这2个函数返回的结果可能是有差异的。
加上前缀“D”的函数是特别针对Range对象或数据库数据的相关数学运算,例如DMax,DMin,DCount,DSum。
除了这些常⽤的函数,⼯作表函数还包含了相当多的⾼级数学计算函数,⽐如矩阵,⽅差,分布,统计,利率,虚数计算相关的函数,具体需要使⽤的时候查阅MSDN就可以了。
在MSDN上,很多函数的很多参数是必须的,但是使⽤的时候,编译器的提⽰是说这些参数不是必须的,这个时候以编译器为准。谨记,实践是检验真理的唯⼀标准。
基本上,如果参数是需要传⼊⼀组数的函数,都可以传⼊⼀个数组或单元格。
实际学习过程中,我是先了解这些内置的函数能⼲什么,但并不太关注细节;等实际使⽤的时候,才会到需要的函数,匹配实现细节的。
全部的函数说明参见下⾯的MSDN链接:或者是
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论