了解VBA與Excel內(nèi)置的函數(shù),能夠使我們處理起任務(wù)來(lái)事半功倍。這些函數(shù)不僅使用方便,而且效率一般都比較高(有些是例外的,特別是某些工作表函數(shù)),比我們自己寫的要高效的多。
1. VBA內(nèi)置的函數(shù)
VBA內(nèi)置函數(shù)是VBA種可以直接使用的函數(shù),很多處理函數(shù)也相當(dāng)有用。
調(diào)用方式:直接使用函數(shù),或者使用VBA調(diào)用。例如Shell()或者VBA.Shell()。
VBA內(nèi)置的函數(shù)主要涉及以下幾類:
測(cè)試類函數(shù):
IsNumeric(x) - 是否為數(shù)字, 返回Boolean結(jié)果。
IsDate(x) - 是否是日期, 返回Boolean結(jié)果。
IsEmpty(x) - 是否為Empty, 返回Boolean結(jié)果。
IsArray(x) - 指出變量是否為一個(gè)數(shù)組。
IsError(expression) - 指出表達(dá)式是否為一個(gè)錯(cuò)誤值。
IsNull(expression) - 指出表達(dá)式是否不包含任何有效數(shù)據(jù) (Null)。
IsObject(identifier) - 指出標(biāo)識(shí)符是否表示對(duì)象變量。
數(shù)學(xué)函數(shù):
Sin(X)、Cos(X)、Tan(X)、Atan(x) - 三角函數(shù),單位為弧度。
Log(x)、Exp(x) - 返回x的自然對(duì)數(shù),指數(shù)。
Abs(x) - 返回x的絕對(duì)值。
Int(number)、Fix(number) - 都返回參數(shù)的整數(shù)部分,區(qū)別:Int 將 -8.4 轉(zhuǎn)換成 -9,而 Fix 將-8.4 轉(zhuǎn)換成 -8。
Sgn(number) - 返回一個(gè) Variant (Integer),指出參數(shù)的正負(fù)號(hào)。
Sqr(number) - 返回一個(gè) Double,指定參數(shù)的平方根。
VarType(varname) - 返回一個(gè) Integer,指出變量的子類型。
Rnd(x) - 返回0-1之間的單精度數(shù)據(jù),x為隨機(jī)種子。
Round(x,y) - 把x四舍五入得到保留y位小數(shù)的值。
字符串函數(shù):
Trim(string)、Ltrim(string)、Rtrim(string) - 去掉string左右兩端空白,左邊的空白,右邊的空白。
Len(string) - 計(jì)算string長(zhǎng)度
Replace(expression,find,replace) - 替換字符串。
Left(string, x)、Right(string, x)、Mid(string, start,x) - 取string左/右/指定段x個(gè)字符組成的字符串
Ucase(string)、Lcase(string) - 轉(zhuǎn)換字符串為大、小寫
Space(x) - 返回x個(gè)空白的字符串
Asc(string) - 返回一個(gè) integer,代表字符串中首字母的字符代碼
Chr(charcode) - 返回 string,其中包含有與指定的字符代碼相關(guān)的字符
InStr() - 返回一個(gè)字符串在另外一個(gè)字符串中的位置,返回值為Variant(Long)型。
轉(zhuǎn)換函數(shù):
CBool(expression) - 轉(zhuǎn)換為Boolean型
CByte(expression) - 轉(zhuǎn)換為Byte型
CCur(expression) - 轉(zhuǎn)換為Currency型
CDate(expression) - 轉(zhuǎn)換為Date型
CDbl(expression) - 轉(zhuǎn)換為Double型
CDec(expression) - 轉(zhuǎn)換為Decemal型
CInt(expression) - 轉(zhuǎn)換為Integer型
CLng(expression) - 轉(zhuǎn)換為L(zhǎng)ong型
CSng(expression) - 轉(zhuǎn)換為Single型
CStr(expression) - 轉(zhuǎn)換為String型
CVar(expression) - 轉(zhuǎn)換為Variant型
Val(string) - 轉(zhuǎn)換為數(shù)據(jù)型
Str(number) - 轉(zhuǎn)換為String
時(shí)間函數(shù):
Now、Date、Time - 返回一個(gè) Variant (Date),根據(jù)計(jì)算機(jī)系統(tǒng)設(shè)置的日期和時(shí)間來(lái)指定日期和時(shí)間。
Timer - 返回一個(gè) Single,代表從午夜開始到現(xiàn)在經(jīng)過的秒數(shù)。
TimeSerial(hour, minute, second) - 返回一個(gè) Variant (Date),包含具有具體時(shí)、分、秒的時(shí)間。
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) - 返回 Variant (Long) 的值,表示兩個(gè)指定日期間的時(shí)間間隔數(shù)目。
Second(time) - 返回一個(gè) Variant (Integer),其值為 0 到 59 之間的整數(shù),表示一分鐘之中的某個(gè)秒。
Minute(time) - 返回一個(gè) Variant (Integer),其值為 0 到 59 之間的整數(shù),表示一小時(shí)中的某分鐘。
Hour(time) - 返回一個(gè) Variant (Integer),其值為 0 到 23 之間的整數(shù),表示一天之中的某一鐘點(diǎn)。
Day(date) - 返回一個(gè) Variant (Integer),其值為 1 到 31 之間的整數(shù),表示一個(gè)月中的某一日
Month(date) - 返回一個(gè) Variant (Integer),其值為 1 到 12 之間的整數(shù),表示一年中的某月。
Year(date) - 返回 Variant (Integer),包含表示年份的整數(shù)。
Weekday(date, [firstdayofweek]) - 返回一個(gè) Variant (Integer),包含一個(gè)整數(shù),代表某個(gè)日期是星期幾。
其它常用函數(shù):
Shell - 運(yùn)行一個(gè)可執(zhí)行的程序。
InputBox - 這個(gè)太熟悉了,簡(jiǎn)單輸入對(duì)話框。這個(gè)需要注意與Application.InputBox(更強(qiáng)大,內(nèi)置容錯(cuò)處理,選擇取消后返回false)區(qū)分,而這個(gè)函數(shù)不含有容錯(cuò)處理,而且選擇取消后返回空串(零個(gè)字節(jié)的字符串)。
MsgBox - 這個(gè)更不用說了,簡(jiǎn)單信息顯示對(duì)話框,其實(shí)也是一種簡(jiǎn)單的輸入手段。
Join - 連接數(shù)組成字符串。
Split - 拆分字符串成數(shù)組。
RGB - 返回指定R、G、B分量的顏色數(shù)值。
Dir - 查找文件或者文件夾。
IIF(expression, truePart, falsePart) - IF語(yǔ)句的“簡(jiǎn)化版本”(比喻,當(dāng)然并不一樣);expression為true的話返回truePart,否則返回falseParth。
Choose(index, choice1,...choiceN) - 選擇指定Index的表達(dá)式,Index可選范圍是1到選項(xiàng)的總數(shù)。
Switch(exp1,value1,exp2,value2,...expN,valueN) - 從左至右計(jì)算每個(gè)exp的值,返回首先為true的表達(dá)式對(duì)應(yīng)的value部分。如果所有的exp值都不為true,則返回Null。注意雖然只返回一個(gè)部分,但是這里所有的表達(dá)式exp1到expN都是要被計(jì)算的,實(shí)際使用中要注意這個(gè)副作用。
2. WorksheetFunction工作表函數(shù)
WorksheetFunction工作表函數(shù)是Excel內(nèi)置的處理函數(shù),計(jì)算功能相當(dāng)強(qiáng)大。
調(diào)用方式:Application.WorksheetFunction或者直接WorksheetFunction。例如Application.WorksheetFunction.Max()或者WorksheetFunction.Max()。
VBA內(nèi)置的函數(shù)是用于處理程序數(shù)據(jù)的,是為VB語(yǔ)言服務(wù)的,所有VBA宿主環(huán)境都可以使用這些內(nèi)置的功能。但是對(duì)于Worksheet中的對(duì)象,似乎這些通用的函數(shù)并不能提供最佳的實(shí)踐。所以針對(duì)Sheet,又存在另外一套相關(guān)的處理函數(shù),雖然它們與VBA中的某些函數(shù)作用是一樣的,但是從“工作表函數(shù)”這個(gè)名字上就可以看出,對(duì)于工作表中的對(duì)象的所有操作,比如對(duì)單元格求和,求單元格中最大值等,使用工作表函數(shù)必將具有先天的優(yōu)勢(shì)(當(dāng)然了,工作表函數(shù)基本上都是可以在Excel單元格中直接輸入“=”然后就可以使用的)。雖然從實(shí)際的操作中,我們可能發(fā)現(xiàn),使用內(nèi)置的工作表函數(shù)并不一定是最快,最高效的,但無(wú)疑是最直接,最省事的。
這里簡(jiǎn)單總結(jié)一下常用的幾類函數(shù)。全部的函數(shù)說明參見文末的MSDN鏈接。
數(shù)學(xué)函數(shù)類:
BesselI(貝塞爾函數(shù)) BesselJ BesselK BesselY Power(指數(shù)) Log(對(duì)數(shù),還有以不同) In(自然對(duì)數(shù)) Fact(階乘) FactDouble(半數(shù)階乘,意思就是偶數(shù)的只計(jì)算偶數(shù)階乘,奇數(shù)的只奇數(shù)奇數(shù)階乘) PI(圓周率)
弦值計(jì)算類:
Acos Acosh Asin Asinh Atan2 Atanh Cosh Sinh Tanh
數(shù)制轉(zhuǎn)換類:
Bin2Dec Bin2Hex Bin2Oct Dec2Bin Dec2Hex Dec2Oct Hex2Bin Hex2Dec Hex2Oct Oct2Bin Oct2Dec Oct2Hex Degrees與Radians(弧度角度互換).
數(shù)值處理類:
Ceiling(arg1,arg2) - 數(shù)值舍入處理,把a(bǔ)rg1舍入處理成arg2的最接近的倍數(shù)(大于等于傳入的參數(shù))。
Floor(arg1,arg2) - 數(shù)值舍入處理,把a(bǔ)rg1舍入處理成arg2的最接近的倍數(shù)(小于等于傳入的參數(shù))。
Round - 按指定的位數(shù)四舍五入,返回類型是Double。
MRound - 按指定位數(shù)四舍五入,參數(shù)是Variant,返回類型是Double.
RoundDown - 舍去指定位數(shù)后面的小數(shù),總是小于等于傳入的參數(shù),其它的基本同Round。
RoundUp - 舍去指定位數(shù)后的小數(shù)總是進(jìn)1,總是大于等于傳入的參數(shù),其它的基本同Round。
Fixed - 按指定的位數(shù)四舍五入,返回類型是String,可以指定顯示不顯示逗號(hào)(第三個(gè)參數(shù)決定,F(xiàn)alse則顯示逗號(hào),True則不顯示逗號(hào)).
Odd - 返回比參數(shù)大的最接近的奇數(shù)。
Even - 返回比參數(shù)大的最接近的偶數(shù)。
數(shù)值運(yùn)算類:
Average AverageIf AverageIfs Max Min Large Small Sum SumIf SumIfs SumProduct SumSq SumX2MY2 SumX2MY2 SumX2PY2 SumXMY2 Count CountA CountBlank CountIf CountIfs
Frequency - 計(jì)算第二個(gè)數(shù)組的每個(gè)元素在第一個(gè)數(shù)組中出現(xiàn)的次數(shù),返回一個(gè)與第二個(gè)數(shù)組同長(zhǎng)的一個(gè)數(shù)組。一般參數(shù)和返回值都是Range。
Lcm - 計(jì)算數(shù)值的最小公倍數(shù)。
Product - 返回所有參數(shù)的乘積。
Quotient - 返回兩個(gè)數(shù)整除的值,忽略余數(shù)。
邏輯判斷類:
And - 如果所有參數(shù)都為True,則返回True;只要有一個(gè)返回False,則返回False。
Or - 如果所有參數(shù)都為False,則返回False;只要有一個(gè)返回True,則返回True。
IsErr - 檢查是不是除了#N/A外的錯(cuò)誤值.
IsError - 檢查是不是錯(cuò)誤值(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?,或者 #NULL!).
IsEven - 檢查是否是偶數(shù).
IsOdd - 檢查是否是奇數(shù).
IsLogical - 檢查是不是布爾值.
IsNA - 檢查值是否是錯(cuò)誤值#N/A(值不可用)。
IsNonText - 檢查是否是非文本(空的單元格返回true)。
IsNumber - 檢查是不是數(shù)字。
IsText - 一般用于判斷單元格中內(nèi)容是否是文本。
Delta - 判斷兩個(gè)Variant的值是否相等,相等則返回1,否則返回0。
數(shù)據(jù)操作類:
Choose - 返回第一個(gè)參數(shù)Index指定的值. 與VBA內(nèi)置的函數(shù)Choose有類似的功能。
Asc - 把雙字節(jié)字符變成單字節(jié)字符。
Lookup,VLookup,HLookup - 查找單元格數(shù)組中與給定值相同的值,文本等等。
Match - 查找并返回單元格數(shù)組中與指定值相同的單元格的相對(duì)Index值。
Find,FindB,Search,SearchB - 返回第一個(gè)字符串在第二個(gè)字符串中的位置(位置是從1開始的,不是基于0的)。
Replace,ReplaceB - 字符串替換,可以指定開始的位置以替換的字符數(shù),控制更為精細(xì)。
Substitute - 直接進(jìn)行字符串替換,不需要指定開始位置,可控性差,但是使用簡(jiǎn)單。
Rept - 按照指定次數(shù)的重復(fù)構(gòu)造字符串并返回。
Text - 按照一定的格式把值轉(zhuǎn)換成文本。
Index - 一般用于返回一組單元格中某塊區(qū)域中某行某列的值。
Median - 計(jì)算一個(gè)Double的數(shù)值,這個(gè)數(shù)值將參數(shù)分為相同數(shù)目?jī)山M,一組比這個(gè)值大,一組比這個(gè)值小。這個(gè)值可能正好出現(xiàn)在參數(shù)中,也可能不出現(xiàn)在這些參數(shù)中。
Mode - 返回傳入的數(shù)組,或一組值中出現(xiàn)次數(shù)最多的值.
Prope - 格式化字符串中的每個(gè)單詞,把首字母轉(zhuǎn)成大寫,其它的轉(zhuǎn)成小寫。
RandBetween - 返回介于兩個(gè)數(shù)之間的隨機(jī)數(shù),返回值為Double型。
Rank- 返回指定的數(shù)在一個(gè)Range對(duì)象值中排過序后的位置(可以用第三個(gè)參數(shù)指定按降序或升序排,默認(rèn)是降序),比如單元格d1到d4的值為(1,4,3,4),那么4的Rank值就是1(忽略第三個(gè)參數(shù)是按降序找第一個(gè)匹配,然后返回位置)。
Transpose - 把一個(gè)數(shù)組的行列互換,這個(gè)方法主要是針對(duì)單元格的,所以數(shù)組的長(zhǎng)度(<65535),和每個(gè)元素的長(zhǎng)度(<255)都有限制。如果這個(gè)方法由于這些因素失敗了,可以嘗試一下這個(gè)方案:http://club.excelhome.net/thread-583046-1-1.html。
Trim - 移除單詞之間多余的空格,只保留一個(gè);字符串開頭和結(jié)尾的空格也會(huì)全部移除。
Weekday - 返回指定日期是星期幾,用Double值表示,范圍默認(rèn)是從1 (Sunday)到7(Saturday)。
WeekNum - 返回指定日期是一年中的第幾周。
聯(lián)系客服