我的目標:讓中國的大學生走出校門的那一刻就已經具備這些office技能,讓職場人士能高效使用office為其服務。支持我,也為自己加油!
在日常工作中,Excel裡面很多函數我們都用過,比如求和函數Sum,Sumif,計數函數Count,Countif,同樣在VBA裡面也有一些函數,我們稱之為VBA函數,相對於VBA函數,我們經常在工作裡面使用的函數稱之為工作表函數。
在寫代碼時,我們可以引用工作表函數,也可以直接使用VBA函數,但如果VBA函數不能實現某個目的而工作表函數卻能輕鬆實現的情況之下,那就要在代碼中引用工作表中的公式了。
下面我們來看下,如何引用工作表中的公式?
以上圖為例,
一、用VBA在F2中計算金額。
在工作表中使用公式,很簡單,直接在F2中輸入:
=B2*C2
在VBA中表達如下:
Sub 普通公式()Range("f2") = "=b2*c2"End Sub等號後面直接雙引號,雙引號裡公式和工作表裡的公式一致,注意帶等號。
二、如果是要一次性在F2:F8裡輸入公式呢?
這裡要用到循環語句,正好複習前面講過的內容
Sub 普通公式1()Dim x As IntegerFor x = 2 To 8 Cells(x, 6) = "=b" & x & "* c" & xNext xEnd SubX是一個變量,代表行號,公式中凡是文本與數字相連要用&符號,且文本必須用括號括起來。
這裡我們用了Cells,那可以用Range嗎?當然可以,只有這樣舉一反三我們才能真正掌握其寫法:
Sub 普通公式2()Dim X As IntegerFor X = 2 To 8 Range("f" & X) = "=b" & X & "* c" & XNext Xend sub跟上面的代碼很相似,從這個例子中我們觀察到了,比如,我用VBA寫A2單元格,應該是Range("A2"),A2要用雙引號括起來,但如果引用的是A列的任意一個單元格,Ax,x為變量,那麼寫法就是Range("A"&x),而不需要在此基礎上再加雙引號了,同樣,後面跟的公式中含有變量時寫法也是如此。
經過前面幾節的內容,我們也逐步的認識到了VAB中單元格的兩種表示方式:
1、Range("具體的單元地址")
2、Cells(行號,列號)
單元格的表示方法如下:
比如A1單元格,可以寫成,Range("a1"),Cells(1,1),Cells(1,"a"),[a1]
以上是直接引用工作表中的公式,公式中沒有使用函數,如果公式中有函數,又該如何引用呢?
三、如果是要計算A產品的個數呢?
如果是在工作表裡,我們直接
=COUNTIF(A2:A8,"A")
就可以了。
那VBA中會是怎麼樣的呢?
Sub 普通公式3() Range("D12") = "=COUNTIF(A2:A8,""A"")"End Sub跟前面所講的寫法的區別在於,凡是原來公式裡有引號的地方,在VBA中要多加一個引號。
前面兩種情況,我們都了解了,一個是公式中沒有函數的情況,一個是公式中有函數的情況。
四、那我們常用的數組公式,那個大括號,我們平常是按Crtl+Shift+Enter後自動加上去的,這種情況在VBA中怎麼解決呢?
比如上例中:求金額之和,用數組公式是:
=SUM(B2:B8*C2:C8)
VBA中的寫法如下:
Sub 數組公式() Range("e10").FormulaArray = "=SUM(B2:B8*C2:C8)"End Sub數組公式也是等號後面雙引號裡直接複製公式進去,不同在於,如果是數組公式,Range("e10")後要跟FormulaArray(表示數組公式)
五、以上是直接引用工作表中的函數公式,如果在VBA中要調用工作表的函數直接獲得值,語法如下(以計算A產品出現的次數為例):
Sub 調用公式()Range("D12") = Application.WorksheetFunction.CountIf(Range("A1:A8"), "A")End SubApplication.WorksheetFunction.後面跟函數,並且函數的參數寫法要按照VBA中的格式寫,輸入WorksheetFunction.後,系統會自動彈出可以調用的工作表函數。
六、如果是使用VBA自己的函數,其語法如下:
假如A1中為-3,想在A2中得到A1的絕對值
Sub VBA函數()Range("A2") = VBA.Abs(Range("A1"))End SubVBA.後面直接跟VBA函數就可以。
今天的分享就到這裡,希望對大家有所幫助!