[轉載]Excel VBA函數 與工作表函數分類列表

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

發佈了420 篇原創文章 · 獲贊 16 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章