VBA中調用excel的函數

[原創]EXCEL函數應用之五:VBA中調用庫函數

        熟悉EXCEL的同仁們都知道EXCEL帶有強大的庫函數,各種各樣,而且每個函數組合起來使用可以實現很多統計、分析或計算的目標。更進一步,在VBA代碼之中,也可以直接調用EXCEL的庫函數,而且這種調用有時能夠簡化VBA代碼編寫過程,比如有些通過循環尋找某個數字的功能直接在VBA中,用VLOOKUP或Hlookup就可以實現。下面簡要就VBA中調用庫函數的功能進行介紹。

        VBA中使用庫函數一般包括下面幾個情況: 

一、在VBA代碼中設置單元格的公式調用函數

      比如需要給C16單元格設置一個條件求和公式,可以按如下格式設置:Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)"    。此時,在公式字符串中遇到引號就把引號加倍。如果是給某個單元格設置數組公式則,需要啓用單元格的formulaarray屬性,如:Range("c9").FormulaArray = "=SUM(B2:B6*C2:C6)"

二、在VBA代碼中通過庫函數計算數據  

     直接通過固定的公式,將結算的結果賦給某個單元格,要啓用函數evaluate()。如將條件求和的結果賦給單元格D16的方式,如下:Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)") '宏表函數直接把公式表達式轉化爲數值。如果是數組,類似處理,比如:Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")

三、在VBA代碼中直接調用計算數據

       上述兩種調用庫函數的辦法其實沒有將函數真正作爲VBA代碼執行的一部分,而是將其放到單元各種由EXCEL自動運算。實際上EXCEL的表函數也可以直接在VBA中直接調用執行,具體調用格式如下:

調用方法1:變量對象= Application.WorksheetFunction.表函數(表函數參數)

                      實例:Range("d8") = Application.WorksheetFunction.CountIf(Range("A1:A10"), "B")

調用方法2:變量對象=Applicaiton.表函數(表函數參數)

                      實例:Range("d8") = Application.CountIf(Range("A1:A10"), "B")

調用方法3:變量對象= WorksheetFunction.表函數(表函數參數)

                     實例:Range("d8") = WorksheeFunction.CountIf(Range("A1:A10"), "B")

       上述調用方法需要注意:

(1)並非所有表函數都可以在VBA中通過applicaition或worksheetfunction予以調用,比如trunc,numberstring。表函數if()在VBA中,用if then或者iff()替代,而表函數的ROW()函數,通過單元格屬性.row予以替代。

(2)表中使用函數和規則和VBA中使用函數的語法規則不一樣。比如單元格中,求和函數sum(A1:A3),在VBA中,通過application或worksheetfunction的調用時就和函數是sum(range(“A1:A3"))。這裏,"A1:A3"字符串變爲range的一個參數,而range()作爲sum的參數。如果是某個一個單元格,也可以用cell(行號,列號)替代range()。值得注意的是,使用cells()時,其行號和列號全部可變爲變量,而用range()參數爲字符串,如果涉及變量,就需要進行字符串組合的方式使之變爲一個區域參數。當然,range()參數的字符串也可以通過cells替換,比如range("A1:B4")通過range(cells(1,1),cells(4,2))

(3)調用函數可以逐級調用。首先是application,其次是worksheetfunction,最後是application.worksheetfunction方式。

(4)實際的操作中,可能發現,使用內置的工作表函數並不一定是最快,最高效的,但無疑是最直接,最省事的。可以在不精通VBA語言以及相關邏輯規則的前提下,迅速通過調用這些內置函數實現目標。

(5)上述調用方法返回的值可能是一個而錯誤值,比如vlookup調用返回來沒找到結果,如果在VBA中將這個調用函數的值直接返回給一個變量可能報錯。在賦給某個變量之前,要判斷是否爲錯誤值可以用application.isna()。

 

註明:在使用countif函數時,如果滿足的條件中需要引用變量,則應該使用“&”,=countif(range(B2:B4),"="&i)(函數參數中的i是循環變量)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章