zoukankan      html  css  js  c++  java
  • range.FormulaR1C1属性

    大神链接:

    http://www.360doc.com/content/17/0509/23/30583536_652555582.shtml

    FormulaR1C1是公式输入方法 

    在Excel中,我们经常使用各种各样的公式来进行数据的计算分析和处理,在VBA中也不例外。本文将介绍VBA中使用公式的相关属性。

    为了更好地使用公式,让我们先看看Excel中的A1引用样式和R1C1引用样式,再来介绍VBA中与使用公式相关的属性。

    理解A1引用样式和R1C1引用样式

    Excel默认设置为A1样式引用,也就是我们熟悉的行以数字表示,列以字母表示。例如,A1表示工作表或者单元格区域左上角的单元格。

    Excel还可以设置为R1C1样式引用,行列都以数字表示。例如,使用R1C1表示工作表左上角的单元格。此时,需要调出“Excel选项”对话框,勾选“R1C1引用样式”。

    在下面的工作表中,我们使用了计算公式。其中,

    • 列E = 列C * 列D

    • 列F = 列E * 单元格I2

    • 列G = 列E – 列F

    • 单元格G8 = 单元格区域G2:G7之和

    我们就以这张工作表来分析理解A1样式和R1样式。

    使用A1样式公式如下图:

    通常,我们在单元格中输入公式后,往下拉即可复制公式。例如,在单元格E2中输入公式=C2*D2,下拉至单元格E7,Excel会自动调整单元格相对引用并快速得出列E中的结果,列F、列G中也类似。但列F中的单元格I2不变,因为我们使用了绝对引用,即在行或列前加了$符号。

    使用R1C1样式公式如下图:

    可以看出,第5列、第6列、第7列中每列的公式都是相同的。也就是说,整个区域都可以使用同样的公式。

    R1C1样式中,字母R代表行,字母C代表列,字母后面的方括号代表相对引用。字母R后面的方括号中的数字代表相对于当前单元格移动的行数,负数表示向上移动,正数表示向下移动。字母C后面的方括号中的数字代表相对于当前单元格移动的列数,负数表示向左移动,正数表示向右移动。例如,如果当前单元格D5中输入=R[1]C[-1],则引用的单元格为C6。

    若字母R或C后面就是数字,没有方括号,则表示引用为绝对单元格。例如,=R3C2引用单元格B3,不管当前单元格处在哪里。

    若字母R或C后面既没有方括号也没有数字,则表示引用与当前单元格相同的行或列。

    为了更好地理解,下图演示了一些A1样式和R1C1样式的相对引用和绝对引用的例子。

    在VBA中,Range对象的Formula属性和FormulaR1C1属性可以让我们分别使用A1样式和R1C1样式的公式。

    认识Formula属性

    我们通过一些简单的示例来认识Range对象的Formula属性。

    例如,对于下面的工作表,要求在单元格C1中放置单元格区域A1:A5中的数值之和。代码如下:

    结果如下图所示。从编辑栏可以看出,VBA代码在单元格C1中放置了公式:=SUM($A$1:$A$5),该公式执行相应的求和并得到结果。

    如果要求在单元格区域C1:C5中的每个单元格中都放置单元格区域A1:A5中的数值之和,那么只需要将上面的代码中的引用区域Range(“C1”)修改为Range(“C1:C5”)。代码如下:

    结果如图下图所示:

     

    认识FormulaR1C1属性

    在上面的示例中,使用FormulaR1C1属性,也能达到相同的效果。例如,代码:

    在单元格D1中放置对单元格区域A1:A5中的数值求和的结果,如下图所示。

    我们注意到,在单元格D1中显示的公式与前面使用Formula属性显示的公式相同,这是为什么呢?因为Excel默认设置为A1引用样式。

    但是在录制宏时,宏录制器会以R1C1样式来录制输入的公式。例如,对于上面的工作表,当前单元格为C1,并在该单元格中输入公式=SUM($A$1:$A$5)求单元格区域A1:A5中的数值之和。我们使用宏录制器录制上述操作,代码如下:

     

    关于Formula属性和FormulaR1C1属性的官方说明

    两个属性都返回或者设置对象的公式,其中Formula属性表示使用A1引用样式表示法,FormulaR1C1属性表示使用R1C1样式引用。

    说明

    • 如果单元格中是常量,则返回该常量。

    • 如果单元格为空,则返回空字符串。

    • 如果单元格中是公式,那么Formula属性以字符串形式返回该公式,该字符串与公式栏中显示的格式相同(包括等号)。

    • 如果设置单元格中的值或公式为日期格式,Excel将验证单元格是否已经格式化为日期或者时间数字格式。如果不是,Excel将修改数字格式为默认的短日期数字格式。

    • 如果单元格区域是一维

    • 或二维单元格区域,那么设置该公式为相同维度的VB数组。类似地,可以将公式放置到VBA数组中。

    • 设置多单元格区域的公式,使用该公式填充该区域内的所有单元格。

    为什么要在VBA中使用R1C1样式的公式

    至少有以下三个原因:

    • 使用R1C1样式的公式,代码更简洁有效。

    • R1C1样式的公式更稳定,通用性强,不会因为单元格的变化而修改公式。

    • 在VBA中的数组公式需要使用R1C1样式的公式。

    下面举例说明。

    在本文开头的工作表中,我们使用Excel公式计算相应的数据。现在,我们理解了A1引用样式和R1C1引用样式,以及Formula属性和FormulaR1C1属性后,使用VBA程序来计算表中的数据(见下图中红色阴影部分)。

    使用A1样式的公式,程序代码如下:

    使用R1C1样式的公式,程序代码如下:

     

    下面是两段程序的执行过程视频:


     

    可以看出,在某一区域中使用R1C1样式的公式,只需一个公式,即可对其进行全部计算,非常灵活,代码也更简洁。

    再看下面的例子,我们需要在第11行计算合计分。

    使用R1C1样式的公式,只需一句代码即可完成:


     

    如果您对本文介绍的内容还有什么好的示例,欢迎发送邮件给我:xhdsxfjy@163.com

    也可以在本文下方留言,提出您的看法或建议。

    本文属原创文章,转载请联系我或者注明出处。

  • 相关阅读:
    webOFBiz10.4
    堆栈知识
    eas bos二次开发总结[第三方jar、jcom、二次开发包放置]
    计算机编程英语词汇(三)
    计算机英语(四)
    KDTable 表达式应用工具类
    Verilog 流水线加法器
    datagridview 积累
    ajax 调用 webserver
    windows7 vs2008问题结合
  • 原文地址:https://www.cnblogs.com/gongyanxu/p/8635380.html
Copyright © 2011-2022 走看看