Excel VBA 8.43代码写入公式 灵活应对各种计算需求(2)
代码写入公式 灵活应对各种计算需求(2)
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
昨天我们学习了利用VBA写入公式的方法,这样我们就可以在VBA代码中直接使用公式,将行数公式和VBA代码结合在一起,手握excel的两大利器,在处理Excel方面的问题时,就会更加的得心用手。
而用VBA写入公式,说起来虽然简单,写起来也不算是麻烦,但是理解起来就比较的麻烦
所以针对这个点,我们拆开来分为两节来解说。
上一节我们讲解了这里
rng.Offset(0, rng.Columns.Count).Columns(1).FormulaR1C1 = "=" & fangfa & "(rc[-" & rng.Columns.Count & "]:rc[-1])"
这句代码的前半部分,前半段只要是在VBA中使用公式的方法,也就是我们常说的起手式,在Excel中,很多时候我们写入公式就是直接写一个等于号就行了,但是在VBA中,就没有这么简单了,所以我们上一节单独用了一节的时间
今天我们继续来讲解后半部分,后半段就是公式的组成,而这里的公式又和我们常用的函数公式有一些不同,差异很大,所以我们也独立出来,单独一节来学习,这样大家将两节的内容结合在一起,就可以了,这里不太好理解,大家需要多花费一点时间,如果在学习过程中,有什么很难理解的,可以通过文末的微信加我,我可以尽我所能给大家讲解。
代码解析
今天我们着重来解析下后半部分
"=" & fangfa & "(rc[-" & rng.Columns.Count & "]:rc[-1])"
"=" & fangfa,这一部分应该是非常简单的,fangfa就是我们上面通过inputbox选择的计算
然后我们进入今天的难点
也是最不好理解的地方了
(rc[-" & rng.Columns.Count & "]:rc[-1])"
首先先来解释下,这里的R和C分别代表什么
r=row,就是代表了行的意思,横向移动
c=column,就是代表了列的意思,纵向移动
那么这里的正负号又是什么意思?什么情况下正,什么情况下是负呢?
右就是正方向,相反的,往左就是负方向
知道了这个概念之后,我们就比较好理解这句代码的意思了
rc[-" & rng.Columns.Count & "],其实就是往左移动0行,rng.Columns.Count列,
如下图
其实我们就等于移动到了数据源的第一列,
rc[-1],那这一部分大家照猫画虎的应该能理解了。
往左移动0行,1列,那最终得到的是那一列呢?
这两列蓝色的区域,正好就是我们要计算的整个区域的首尾列,完整的公式是这样的
我们来比较下
=SUM(rc[-3]:rc[-1])
=SUM(L2:N2)
这两个公式的结果是一样的,不同的就是一个是我们很容易理解的方式,另外一种就是我们很少用的方式,我们来对照这理解下,这样有助于我们了解在VBA中公式的使用。
其实就是用rc这种移动的方式得到了对应的L2,和N2这两个单元格所在的列。
本案例中,我们要写入公式的是0列,要计算的区域是L列到N列
那么起始列就是L列,那如何从0列移动到L列呢?往左移动3列,行是不变的
那就是rc[-3]
移动到N列就更简单了,只需要往左移动一列即可
就是rc[-1]
最下面一行的计算的,大家对照着这两节的内容,尝试着理解下后面这一句代码的意思吧。
如果能理解,那恭喜你算是掌握和弄懂这个方法了