ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 38848|回复: 42

[分享] R1C1样式---全知道

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-9-1 15:53 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:公式基础
本帖最后由 hzhb14796 于 2011-9-25 14:25 编辑

本帖包含以下内容:
1楼        1,引用单元格:R1C1样式与A1样式比较

5楼        2, EXCEL公式的神奇之处
6楼        3,在VBA中采用A1样式与R1C1样式之比较
7楼        4,怎么引用R1C1样式
9楼        5,R1C1样式的经典实例 ,一种有趣的行为
11楼       6,条件格式中的R1C1样式应用用VBA设置条件格式
12楼       7,VBA中的R1C1样式数组公式








1,引用单元格:R1C1样式与A1样式比较
        DanBricklin和BobFrankston使用A1表示电子表格左上角的单元格,Mitch  Kapor在Lotus 1-2-3中也是使用这种编址方案。
Microsoft试图改变这种趋势,采用了名为R1C1样式编址方案。单元格A1称为R1C1,因为它位于第一行,第一列(Row 1, Column  1)。
       在20世纪80年代和90年代初期,A1样式称为了标准,Microsoft公司认识到了危机,最终让excel接受了A1样式,并同时支持R1C1样式编址方案。当前,excel默认使用A1样式,
为什么学习R1C1样式?
答案是:
      1,excel的宏录制器采用的是R1C1样式录制公式。
      2,R1C1样式比之A1样式有更高的效率,尤其是对于公式,编写的代码效率会更高。
     3,在BVA编辑器中,创建数组公式或基于公式设置条件格式时,采用的是R1C1样式输入公式。
2,下面说明怎么切换R1C1样式
     单击Ofice按钮选择Excel选项,在公式类别中选择复选框“R1C1引用样式”。版面上唯一不同是列标A,B,C--变成数字1,2,3
   单元格C5变为R5C2


该贴已经同步到 hzhb14796的微博




13.gif

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-9-1 16:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-9-1 16:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
是值得学习的  有时解决问题 用到 TEXT(....,"R0C00")  比较方便

TA的精华主题

TA的得分主题

发表于 2011-9-1 16:19 | 显示全部楼层
yangrongguan 发表于 2011-9-1 16:12
是值得学习的  有时解决问题 用到 TEXT(....,"R0C00")  比较方便

同意此观点,用好了起码可以节约内存。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-1 16:20 | 显示全部楼层
本帖最后由 hzhb14796 于 2011-9-1 16:45 编辑

2, EXCEL公式的神奇之处
如动画所示,Excel 能智能的填充公式,并向下复制,第一次看到一定感觉非常惊奇
实际这并不惊奇,因为,Excel内部使用的是R1C1样式的公式以A1样式显示地址和公式。如果将动画所示的工作表切换成R1C1样式表示法,将发现C2:C7的公式都是形同的。

14.gif
15.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-1 16:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3,在VBA中采用A1样式与R1C1样式之比较
    如上述动画实例,如用A1样式编写代码,代码可以类似下面这样
Sub chengji()
'
' 宏1 宏
'
Dim Finalrow  As Integer
   Finalrow = Cells(Rows.Count, 2).End(xlUp).Row   '求第二列数据行数
    Range("c2").Formula = "=a2*b2"
    Range("C2").Copy Destination:=Range("C2:C" & Finalrow)
   
End Sub
上述代码在第二行输入公式,在向下复制公式
如果用R1C1样式只需一条语句就可整列输入公式
Sub chengji()
'
' 宏1 宏
'
Dim Finalrow  As Integer
   Finalrow = Cells(Rows.Count, 2).End(xlUp).Row   '求第二列数据行数
    Range("c2:c" & Finalrow ). FormulaR1C1 = "=RC[-1]*RC[-2]"   
End Sub
使用R1C1样式的优点是,所有C列的公式都是相同的,不需要改变

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-1 17:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 hzhb14796 于 2011-9-1 17:34 编辑

4,怎么引用R1C1样式
     R1C1样式采用R来表示行,C来表示列
   4.1  样式的相对引用
          对于列正数表示向右移指定数量的列,负数反之。
         对于行正数表示向下移指定数量的行,负数反之。
        如果省略掉R或C的方括号,表示和引用单元格在同行或同列。
   4.2 样式的绝对因用
        在A1样式中使用绝对引用要在行号或列号字母前使用$。但在R1C1样式中只需省略方括号就行了,是不是很简单!!!!!!!!
  如下所示代码
Sub huizong()
'
' 宏3 宏
'
Dim Finalrow  As Integer
   Finalrow = Cells(Rows.Count, 2).End(xlUp).Row + 1
   
    Cells(Finalrow, 1).Value = "汇总"
   
    Cells(Finalrow, 2).Resize(1, 3).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
   
End Sub
引用R2C:R[-1]C表示将第二行到上一行中,同列数据的和,通过使用R1C1混合引用,可是使用公式求行数不确定的数据,
   4.3  引用正行和整列
         有时候需要编写整列的公式。例如求G列的最大值,如不知道G列包含多少行,可在单元格中输入公式=MAX($G:$G),要找出第一行中最大的值可用=MAX($1:$1)或R1C1公式=MAX(R1)。
        可整行,整列使用相对引用,要计算当前单元格上一行的平均值,可用=AVERAGE(R[-1])

引用汇总演示

引用汇总演示

如何在D5引用其周围的单元格

如何在D5引用其周围的单元格

TA的精华主题

TA的得分主题

发表于 2011-9-1 18:33 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-2 17:22 | 显示全部楼层
本帖最后由 hzhb14796 于 2011-9-2 17:59 编辑

5,R1C1样式的经典实例 ,一种有趣的行为

      创建R1C1公式实际上比A1公式更直观。一个演示R1C1公式的经典实例是创建乘法表,在excel中,使用单个混合引用公式就可创建乘法表。
    5.1 创建乘法表
          在B1:M1中输入数字1-12,在A2:a13中也输入数字1-12   ,现在创建b2:m13中所有单元格公式,它计算第一行和第一列的乘积。用R1C1样式公式代码如下
Sub Multiplicationtable()
Range("b1:m1").Value = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
Range("b1:m1").Font.Bold = True
Range("b1:m1").Copy
Range("a2:a13").PasteSpecial Transpose:=True
Range("b2:m13").FormulaR1C1 = "=rc1*r1c"
Cells.EntireColumn.AutoFit
End Sub
5.2 一种有趣的行为
      尝试一下操作,将单元格指针移到F6,单击“开发工具”--”录制宏“,让后单击“开发工具”---“使用相对引用”,输入公式=a1并按ctrl+enter键,以保留在F6键中。单击“停止录制”按钮。
将得到一个只包含一行的代码的宏,它在当前的单元格输入公式,该公式引用向上5行,向左5列的单元格:
Sub 宏1()
'
' 宏1 宏
'
'
    Selection.FormulaR1C1 = "=R[-5]C[-5]"
End Sub
现在将单元格指针移到A1并运行刚才的宏,你可能会认为将导致运行错误1004,但实际并没有出现这种错误。运行宏时,单元格A1中的公式指向=XF1048572,这意味这R1C1公式从表的左侧绕回到右侧,这是一个很有趣的行为,但是可能宏将提供一个与用户期望不同的结果!!!!!!

乘法表实例

乘法表实例

一种有趣行为演示

一种有趣行为演示

TA的精华主题

TA的得分主题

发表于 2011-9-6 08:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-12 05:08 , Processed in 0.035262 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表