Excel VBA 學習筆記5:函數與公式
第6節 函數與公式
我們在使用Excel的時候經常會用到很多自帶函數或自定義函數,那麼當在編寫VBA的時候怎樣使用這些函數呢?
一、在單元格中輸入公式
1、用VBA在單元格中輸入普通公式
Range("d2")= "=b2*c2"
這一句就是將B2和C2的乘積賦值給D2,寫的時候不要忘記等號和雙引號!引號裡面的內容跟我們在單元格里輸入公式的方法是一樣的。
當然這種方式可以用循環來寫很多單元格。
注意我們前面提到的變數和非變數要用&符號連起來,非變數部分要加雙引號。這兩個例子有兩種單元格的書寫方式,Range("A1")用於沒有變數的單元格,不能有變數,需要加雙引號;Cells(a,b)兩種方式都可以,不需要雙引號。
總體來說,這種方式就是我們在單元格中手動輸入公式,我們可以在單元格里看到公式。
2、用VBA在單元格輸入帶引號的公式
如果我們需要輸入的公式中本身就帶有引號,那麼,不管是單引號還是雙引號,都要加倍。
Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)"
SumIf是我們在Excel中常用的一個函數,有條件的求和,即把符合條件的加起來,不符合的不加。
3、用VBA在單元格中輸入數組公式
Range("c9").FormulaArray= "=SUM(B2:B6*C2:C6)"
Formula是公式的意思,Array是數組的意思,.FormulaArray就是數組公式。這句代碼是B2*C2+B3*C3+……+B6*C6。關於數組,後續有專門的介紹。
以上幾個方法都是相當於在單元格中輸入各種公式的操作,我們可以在表格中看到公式,如果不想讓別人看到你的計算過程,那麼就要用下面幾種方法了。
二、利用單元格公式返回值
在第一類方法的基礎上加上Evaluate()函數即可,這個單詞就是計算的意思。同樣,不要忘記引號加倍!
Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)")
Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")
三、借用工作表函數
Excel內置的函數就是工作表函數WorksheetFunction,它們就是我們在操作表格的時候常用到函數,在VBA中利用這些函數的時候需要用Application.WorksheetFunction。
Range("d8") = Application.WorksheetFunction.CountIf(Range("A1:A10"), "B")
CountIf是把符合條件的計數,不符合的不計數,最終結果返回的是個數。
四、利用VBA函數
跟工作表函數對應的是VBA函數,這是VBA環境自帶的函數,在使用的時候需要加上VBA.。
Range("C20") =VBA.InStr(Range("a20"), "E")
InStr函數返回的是指定一字元串在另一字元串中最先出現的位置,具體用法可以參考幫助文件。
五、編寫自定義函數
當我們遇到工作表函數和VBA函數都沒有的工作時,可以自定義自己的函數,具體的寫法跟Sub過程一樣,只不過它用的Function,下面就是個例子,它用來獲得當前工作表的名稱。
到這裡,你一定會非常困惑,哪些是工作表函數,哪些是VBA函數?如果有寫好的當然執行效率高了,也省的我們費勁去寫自己的了,這個需要我們參考幫助文件和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
相關筆記請參閱:
Excel VBA 學習筆記4:VBA變數
Excel VBA 學習筆記3:循環語句
Excel VBA 學習筆記2:條件語句
Excel VBA 學習筆記1:語句、對象、方法、屬性
推薦閱讀: