在日常工作中,Excel里面很多函数我们都用过,那在VBA中该怎么使用函数达到你的目的呢?



vba获取function返回值 vba调用function返回值_vba获取function返回值


以上图为例,

一、用VBA在F2中计算金额,如果使用公式,那很简单,直接在F2中输入:

=B2*C2

在VBA中表达如下:

Sub 普通公式()

Range("f2") = "=b2*c2"

End Sub

等号后面直接双引号,双引号里公式和工作表里的公式一致,注意带等号。

二、如果是要一次性在F2:F8里输入公式呢?这里要用到循环语句,正好复习前面讲过的内容

Sub 普通公式1()

Dim x As Integer

For x = 2 To 8

Cells(x, 6) = "=b" & x & "* c" & x

Next x

End Sub

X是一个变量,代表行号,公式中用凡是文本与数字相连要用&符号,且文本必须用括号括起来。

这里我们用了cells,那可以用range吗?当然可以,只有这样举一反三我们才能真正掌握其写法:

Sub 普通公式2()

Dim X As Integer

For X = 2 To 8

Range("f" & X) = "=b" & X & "* c" & X

Next X

end sub

跟上面的代码很相似,从这个例子中我们观察到了,比如,我用VBA写A2单元格,应该是range("A2"),A2要用双引号括起来,但如果引用的是A列的任意一个单元格,Ax,x为变量,那么写法就是range("A"&x),而不需要在此基础上再加双引号了,同样,后面跟的公式中含有变量时写法也是如此。

我们也可以看到单元格的两种表示方式:

range("A1")后者是cells(1,1)

三、如果是要计算A产品的个数呢?

如果是工作表里,我们直接

=COUNTIF(A2:A8,"A")

那VBA中会是怎么样的呢?

Sub 普通公式3()

Range("D12") = "=COUNTIF(A2:A8,""A"")"

End Sub

跟上一个写法的区别在于,凡是原来公式里有引号的,在VBA中要多加一个引号。

前面两种情况,我们都了解了,一个是公式中没有引号的情况,一个是公式中有引号的情况。

四、那我们常用的数组公式,那个大括号,我们平常是按crl+shift+enter后自动加上去的,这种情况在VBA中怎么解决呢?

比如上例中:求金额之和,用数组公式是:

=SUM(B2:B8*C2:C8)

VBA中写法如下:

Sub 数组公式()

Range("e10").FormulaArray = "=SUM(B2:B8*C2:C8)"

End Sub

数组公式也是等号后面双引号里直接复制公式进去,不同在于,如果是数组公式,Range("e10")后要跟FormulaArray(表示数组公式)

五、在编辑栏中,我们可以看到,上面讲的几种情况均是使用VBA输入公式,而非用VBA直接得出值。我们平常在工作表中使用的函数叫做工作表函数,而VBA里也有自己的函数,如果在VBA中要调用工作表的函数直接获得值,语法如下(以计算A产品出现的次数为例):

Sub 调用公式()

Range("D12") = Application.WorksheetFunction.CountIf(Range("A1:A8"), "A")
End Sub

Application.WorksheetFunction.后面跟函数,并且函数的参数写法要按照VBA中的格式写,输入WorksheetFunction.后系统会自动弹出可以调用的工作表函数。


vba获取function返回值 vba调用function返回值_vba获取function返回值_02


六、如果是使用VBA自己的函数,其语法如下:

假如A1中为-3,想在A2中得到A1的绝对值

Sub VBA函数()
Range("A2") = VBA.Abs(Range("A1"))
End Sub

VBA.后面跟函数。

米宏Office