您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页VBA引用单元格

VBA引用单元格

来源:化拓教育网


单元格作为VBA入门的一个必需掌握的概念,单元格的引用有多种方式,现 在根据自己的经验及参考相关的书本来整理涉及单元格引用的知识。

最近发现自己对单元格方面的知识并没有完全掌握,收到了罗版的VBA自学宝典,结合以前的那些相关资料,一边学习,一边把相关的知识点记录下来。

一、选取所有单元格。

1. Sub 选取全部单元格一()

2. Cells.Select

3. End Sub

复制公式 或代码

注:cells是所有单元格 的集合。

1. Sub 选取全部单元格二()

2. Rows.Select

3. End Sub

复制公式 或代码

而Rows则是所有行的集合。

1. Sub 选取全部单元格三()

2. Columns.Select

3. End Sub

复制公式 或代码

而columns则是所有列的集合。

无论是所有单元格的集合,还是所有行或列的集合选取,都是工作表中全选所有单元格的表示方式。

二、Range引用来选取单元格

1、Range引用单元格方式1:Range(\"单元格地址\")

例如:Range(\"A1\"):表示单元格A1,注意:单元格地址要加双引号

值得注意的是:双引号的输入必须是在半角状态下输入的,否则会出现错误。

\"单元格地址\"里面的单元格地址不区分相对引用和绝对引用的,无论你是使用Range(\"A1\")、Range(\"$A1\")、 Range(\"$A$1\")还是Range(\"A$1\"),都是引用通一个单元格。

一般为了简化作用,直接用Range(\"A1\")这种形式来表示引用单元格。

2、Range引用单元格方式2:Range(\"单元格区域\")

在VBA数组中,经常遇到arr=Range(\"A1:D10\")这种数组赋予方式,而里面出现了Range(\"单元格区域\")的这种单元格区域引用。

从这个最常见的例子中,我们可以发现,\"A1:D10\"代表了一个单元格区域的引用,其中A1是该区域的左上角上面的单元格,而D10则是该区域右下角下 面的单元格。

但大家可以从下面两个例子来发现:

1. Sub q1()

2. Range(\"A1:D10\").Select

3. End Sub

4. Sub q2()

5. Range(\"D10:A1\").Select

6. End Sub

复制公式 或代码

这两个小例子得到的结果都是选取A1:D10这个单元格区域

值得大家注意的,以下的这些通过索引号作为参数的引用,都是比较陌生的。

比如以下这个小例子:

例子1:

1. Sub T1()

2. Range(\"B2:E6\")(1).Select

3. End Sub

复制公式 或代码

注释:该例子代表了选取B2:E6区域中的第一个单元格的,即选取B2

例子2:

1. Sub T2()

2. Range(\"B2:E6\")(3).Select

3. End Sub

复制公式 或代码

注:该例子代表选取B2:E6区域中的第三个单元格,即D2,而单元格的区域的读取一般是从左到右,然后再从上到下进行读取 的,故该区域的前3个单元格分别是B2、C2、D2,而第3个单元格就是为D2

例子3:

1. Sub T3()

2. Range(\"B2:E6\")(3.5).Select

3. End Sub

复制公式 或代码

注意:当里面的索引号为小数时,excel会对其进行四舍五入,比如例子3中的3.5,excel会把它转换为4,故例子3 中的代表是B2:E6区域的第4个单元格选取,即选取E2

例子4:

1. Sub T4()

2. Range(\"B2:E6\")(3.2).Select

3. End Sub

复制公式 或代码

而例子4中,因为四舍五入的关系,得到的结果是选取该区域的第3个单元格,即选取D2

例子5:

1. Sub F1()

2. Range(\"B2:E6\")(1, 4).Select

3. End Sub

复制公式 或代码

注:在例子5中,Range(\"单元格区域\")(行号,列号),所代表的是选取该单元格区域中第几行与第几列交叉的那个单元 格,而例子5中代表是选取B2:E6区域中的第1行第4列的单元格,在该区域中,所符合条件的单元格为E2。

值得关注的是,(行号,列号)里面的参数可以使用0或者负数。

当行号的参数为0的时候,则向该区域的左上角单元格向上偏移一个单位,当列号为0时候,则向该区域左上角单元格向左偏移一个单位;如果参数是负数的时候, 在原来的基础上追加偏移量。

具体请看例子6、7:

1. Sub F1()

2. Range(\"B2:E6\")(0, 0).Select

3. End Sub

复制公式 或代码

例子6中是选取了A1单元格,即B2:E6区域左上角单元格B2分别向上偏移一行,向左偏移一列,所得到的单元格为A1

例子7:

1. Sub F1()

2. Range(\"C3:E6\")(-1, -1).Select

3. End Sub

复制公 式或代码

例子7中代表了C3:E6区域的左上角单元格C3分别向上偏移两行,向左偏移两列,所得到的单元格为A1

3、Range(\"列标\" & 行数)的单元格引用方式:

例子7:

1. Sub Y()

2. Range(\"B\" & 10).Select

3. End Sub

复制公 式或代码

从这个最简单的例子,一个最常见的单元格引用方式。注意:列标需要加上双引号,并且要用到\"&\"把列标和行号连接 起来。

经常用到的一个例子:往A1:A100里面分别填充1到100等这100个数字

1. Sub a()

2. Dim i As Integer

3. For i = 1 To 100

4. Range(\"A\" & i) = i

5. Next i

6. End Sub

复制公 式或代码

从中可以看到这种单元格方式引用的作用。

4、Range(\"定义名称\")的单元格引用:

首先在excel2007中,公式→定义名称→把\"A1:A100\"区域定义为\"数字\"。

便可以使用这种方式,具体请看以下例子:

1. Sub B()

2. Range(\"数字\").Select

3. End Sub

复制公 式或代码

注:A1:A100这个区域已经定义名称为\"数字\",该代码表示选取A1:A100单元格区域

注意:定义名称也必须添加双引号,并且是半角下输入的。

5、Range方式引用多个区域:

前面详细说了:Range(\"A1:B10\")这样类似的区域引用方式,但值得注意的是,那只

是连续区域的引用。还有一些不连续的区域,则需要在区域中间 加,号

比如以下例子:

1. Sub 多区域引用()

2. Range(\"A1,C1,D3:E8\").Select

3. End Sub

复制公 式或代码

注意:\"A1,C1,D3:E8\"这个为不连续的区域,中间需要用,号隔开,并且不连续的区域直接还是要用双引号作为标 记,这个代码表示选取A1、C1、D3:E8。

这里主要要关注,号的使用。

但是,该方式引用有一个:参数的长度不能超过256个字符,否则产生运行错误。

连接上面那个例子,给出另外一种使用方式:

1. Sub 多区域引用2()

2. Union(Range(\"A1\"), Range(\"C1\"), Range(\"D3:E8\")).Select

3. End Sub

复制公 式或代码

该例子中主要使用了union 来进行连接,这种方式得到的结果和上面的那个例子所得到的结果是一样的。

这两种方式,都是对不连续区域进行连接,相对比,还是上面的那个例子比较简洁。

Range嵌套使用

主要语法:Range(cell1,cell2),其中cell1和cell2是必选参数。Cell1代表指定区域目标的左上角单元格,Cell2代表指定区域目标右下角单元格。

具体看例子

1. Sub a()

2. Range(Range(\"A1\"), Range(\"E4\")).Select

3. End Sub

复制公式或代码

注:该例子表示选取A1:E4区域

而下面这个例子:

1. Sub B()

2. Range(Range(\"A1:A3\"), Range(\"E2\")).Select

3. End Sub

复制公式或代码

注:上面这个例子表示选取A1:E3区域。注意不是选取A1:E2的区域。VBA会从两个区域中最左上角的单元格作为新的区域作为参照起点, 再取两个区域所跨越的最大行作为新的区域行数,取两个区域跨越的最大列作为新区域的列数。

与Range相关的选取整行或整列:

1. Sub a()

2. Range(\"A:A\").Select

3. End Sub

复制公 式或代码

上面这个例子,表示选取A列,注意,无论是\"A:A\"或者是\"A:a\代表的都是选取A列,里面不区分大小写。

另外表示选取第一列,还可以用下面的代码:

1. Sub yy()

2. Columns(1).Select

3. End Sub

复制公 式或代码

1. Sub aa()

2. Columns(\"A\").Select

3. End Sub

复制公 式或代码

1. Sub aa1()

2. Columns(\"A:A\").Select

3. End Sub

复制公 式或代码

而选取第一行可以用下面的例子:

1. Sub b()

2. Range(\"1:1\").Select

3. End Sub

复制公 式或代码

而选取第一行,还可以使用下面的代码:

1. Sub yy1()

2. Rows(1).Select

3. End Sub

复制公 式或代码

1. Sub aa2()

2. Rows(\"1\").Select

3. End Sub

复制公 式或代码

1. Sub aa3()

2. Rows(\"1:1\").Select

3. End Sub

复制公 式或代码

三、Cells引用单元格

1、Cells(行数,列数)

请看下面例子:

1. Sub a()

2. Cells(1, 2).Select

3. End Sub

复制公式 或代码

该例子表明选取B1单元格

2、Cellls(行数,列标)

请看例子:

1. Sub ba()

2. Cells(2, \"B\").Select

3. End Sub

复制公式 或代码

该例子中表明选取B2 单元格,但该方法引用单元格永远只能引用一个,并且不能引用区域。

3、Range.cells(横坐标,纵坐标)

这种方式引用单元格是以其父对象Range左上角单元格作为参照系,向下累加的坐标系数来指定单元格。

请看下例:

1. Sub aa()

2. Range(\"B2:F10\").Cells(2, 2).Select

3. End Sub

复制公式 或代码

该代码表示B2:F10单元格中横坐标为2、纵坐标为2的单元格C3,该参照是以B2为基准的。

另外,cells里面可以使用小数,不过VBA会对其进行四舍五入再计算,具体看下例:

1. Sub au()

2. Range(\"B2:F10\").Cells(3.8, 3.4).Select

3. End Sub

复制公式 或代码

该代码表示B2:F10单元格中横坐标为4、纵坐标为3的单元格D5。

4、Range.cells(索引号)

当使用单个索引号作为参数时,它表示父对象中的一个索引子集。其编号方式是先行后列、先左后右。

请看下例:

1. Sub au()

2. Range(\"B2:F10\").Cells(3).Select

3. End Sub

复制公式 或代码

该例子表示B2:F10区域中第3个单元格D2。

这种方式比较少见,也比较少用。

四、[A1]方式引用单元格,该单元格表示的简化方法。

单元格的简化表达方式:[单元格地址]

表示单元格A1,简写为[A1]

注意:单元格地址外是中括号([]),单元格地址不能使用双引号。

1. Sub 选取单元格A1的方法()

2. [A1].Select

3. End Sub

复制公式 或代码

该例子表示选取单元格A1。

另外,该方式可以用来表示选取单元格区域:

1. Sub 选取()

2. [A1:D10].Select

3. End Sub

复制公式 或代码

表示选取A1:D10区域。

而[]之间可以使用逗号开选取不连续单元格,具体请看下例:

1. Sub 选取()

2. [A1:D10,H1,H10].Select

3. End Sub

复制公式 或代码

表示选取A1:D10、H1、H10等区域的单元格。

从该例子看出,[A1]的方式是最简单的写法。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务