Excel VBA函數 與工作表函數分類列表
瞭解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到選項的總數。
Switch(exp1,value1,exp2,value2,...expN,valueN) - 從左至右計算每個exp的值,返回首先爲true的表達式對應的value部分。如果所有的exp值都不爲true,則返回Null。注意雖然只返回一個部分,但是這裏所有的表達式exp1到expN都是要被計算的,實際使用中要注意這個副作用。
部分內容來自下面的連接,感謝樓主的無私奉獻。大家入門學學還是很不錯的,推薦一下:http://club.excelhome.net/forum.php?mod=viewthread&tid=178278&extra=page=3&filter=digest&digest=1&page=1
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)都有限制。如果這個方法由於這些因素失敗了,可以嘗試一下這個方案:http://club.excelhome.net/thread-583046-1-1.html。
Trim - 移除單詞之間多餘的空格,只保留一個;字符串開頭和結尾的空格也會全部移除。
Weekday - 返回指定日期是星期幾,用Double值表示,範圍默認是從1
(Sunday)到7(Saturday)。
WeekNum - 返回指定日期是一年中的第幾周。
基本上以Variant爲參數的函數都是可以直接傳入單元格的。
以B結尾的函數代表是推薦使用於雙字節的字符語言的,比如漢子,日語等。不以B結尾的函數代表的是推薦使用於單字節字符語言的,例如英語,德語等。
對於不同的語言,這2個函數返回的結果可能是有差異的。
加上前綴“D”的函數是特別針對Range對象或數據庫數據的相關數學運算,例如DMax,DMin,DCount,DSum。
除了這些常用的函數,工作表函數還包含了相當多的高級數學計算函數,比如矩陣,方差,分佈,統計,利率,虛數計算相關的函數,具體需要使用的時候查閱MSDN就可以了。
在MSDN上,很多函數的很多參數是必須的,但是使用的時候,編譯器的提示是說這些參數不是必須的,這個時候以編譯器爲準。謹記,實踐是檢驗真理的唯一標準。
基本上,如果參數是需要傳入一組數的函數,都可以傳入一個數組或單元格。
實際學習過程中,我是先了解這些內置的函數能幹什麼,但並不太關注細節;等實際使用的時候,纔會找到需要的函數,匹配實現細節的。
全部的函數說明參見下面的MSDN鏈接:http://msdn.microsoft.com/en-us/library/bb259450(v=office.12).aspx 或者是http://msdn.microsoft.com/en-us/library/bb225774(v=office.12).aspx