VBA功能强大,不仅能灵活的统计数据,也能在指定的单元格中自动写公式。
下面就给你认真的介绍,通过VBA如何在Excel单元格中自动写公式。
先看下图。
下面的表,我们要使用VBA在C和D两列分别自动输入公式并得出计算结果。
要想自动写公式,就得使用一个函数,该函数是FormulaR1C1。
总之,自动写公式的中文语法为:
作为参照对象的单元格.FormulaR1C1 = "=公式名称(R[行偏移量]:C[列偏移量]:R[行偏移量]:C[列偏移量])
下面,我们就先给出上表的两种自动写公式的VBA代码,分别如下:
'第一种写法
For i = 2 To 5
'总分公式
Worksheets(1).Cells(i, 3).FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
'平均分公式
Worksheets(1).Cells(i, 4).FormulaR1C1 = "=Average(RC[-3]:RC[-2])"
Next i
'第二种写法
For i = 2 To 5
'总分公式
Worksheets(1).Range("C" & i).FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
'平均分公式
Worksheets(1).Range("D" & i).FormulaR1C1 = "=Average(RC[-2]:RC[-1])"
Next i
公式说明
Worksheets(1).Cells(i, 3).FormulaR1C1或Worksheets(1).Range("C" & i).FormulaR1C1,代表的是参照对象的单元格。其中i是变量,如果i等于2,那么:
Worksheets(1).Cells(2, 3).FormulaR1C1代表的是第一个工作表的第2行第3列的单元格,即C2单元格。当然,Worksheets(1).Range("C" & 2).FormulaR1C1,指的也是C2单元格。
另外,还有一个重要概念就是RC,比如RC[-2]:RC[-1]代表的是什么意思呢?这在上面也提到过了,RC代表的是偏移量,R代表行,C代表列。到底偏移多少,那么,必须以指定的单元格作为参照对象。其中的偏移量,可以使用这样的方法来说明,如:
R[行偏移量]:C[列偏移量] 其中,行列都可以偏移,也都可以不偏移,如果给出数字,就说明一定偏移,如果不给出数据,就说明不偏移;如果给出的是负数,说明是往左或往上移,如果给出的是正数,那么是往右或往下偏移。
比如,以C2单元格为参照对象(C2的位置为第2行第3列),那么,通过 R[1]:C[-1] 之后,说明行向下移一行,变成第3行,而列的偏移为负1,说明向左偏移1行,则列变成2,因此,通过这样的偏移后,那么,就为B3单元格了。
再比如,D6单元格,通过 R:C[3] 偏移之后(我们知道,行未给出偏移量,说明不变,而列的偏移量为3,说明向右偏移3),所得的结果为G6。
最后,我们再回到公式,请看:
Worksheets(1).Cells(i, 3).FormulaR1C1 = "=SUM(RC[-2]:RC[-1])" 假设i等于2
那么,Worksheets(1).Cells(i, 3).FormulaR1C1相当于Worksheets(1).Cells(2, 3).FormulaR1C1,即第一个工作表的第2行第3列的位置,正是C2单元格,以它为参照对象,那么C2单元格的公式为:"=SUM(RC[-2]:RC[-1])"
"=SUM(RC[-2]:RC[-1])" 这如何理解呢?这里涉及到RC偏移,它是以C2单元格单元格为参照对象进行偏移的,我们从中看出,R行偏移未给出参数,说明行不变,都是第2行,而列分别都给出了偏移量,-2代表向左偏移两个位置,即从C列向左偏移两个位置,自然变成A列,那么,RC[-2]就变成A2,而-1代表向左偏移1个位置,由C列变成B列,那么,RC[-1]就变成B2了。
因此,C2单元格中的自动写入的公式"=SUM(RC[-2]:RC[-1])"其实就相当于=SUM(A2:B2),这正是我们所需要的正确的公式。自动写公式和RC偏移量,就给你分析到这里,已经够详细了,其它的类似的,按此方法推理即可。