分享

#Excel VBA#解读(37):单元格的扩张——Resize属性

 L罗乐 2016-10-14

最近在看历史书,讲到了很多国家兼并扩张的故事,很多地方你争我夺,不亦乐乎。如果说国家的扩张源于君主的野心和利益,那Excel单元格的扩张呢?

我们可以使用Resize属性将单元格或单元格区域扩大,看看下面的例子。

语句:

Range('A1').Select

选择单元格A1。这在前面的文章中已介绍过。

下面的语句:

Range('A1').Resize(1, 3).Select

选择单元格区域A1:C1。即将单元格从A1扩大到A1:C1区域,向右增加了2个单元格,占据13列。

下面的语句:

Range('A1').Resize(2, 3).Select

选择单元格区域A1:C2。即将单元格从A1扩大到A1:C2区域,向右且向下共增加了5个单元格,占据23列。

上述语句的运行结果如下图所示。


我们可以看出,利用Resize属性对单元格进行扩张时,以原单元格为起始点但包括原单元格本身,Resize属性的第一个参数值代表扩张后的行数,第二个参数值代表扩张后的列数。

实际上,当在与起始单元格相同的行中进行扩张时,可以省略第一个参数,例如上述代码:

Range('A1').Resize(1, 3).Select

等价于代码(省略了第一个参数):

Range('A1').Resize(, 3).Select

都将选择单元格区域A1:C1

同理,当在与起始单元格相同的列中进行扩张时,可以省略第二个参数。

下面来看看单元格区域的扩张。

语句:

Range('B2:D3').Select

选择单元格区域B2:D3。这在前面的文章中已介绍过。

下面的语句:

Range('B2:D3').Resize(3, 5).Select

选择单元格区域B2:F4。即向右从列D扩展到了列F,增加了2列;向下从行3扩展到行4,增加了1行。


我们可以看出,利用Resize属性对单元格区域进行扩张时,与上文中介绍的对单元格进行扩张相同,以原单元格为起始点但包括原单元格本身,Resize属性的第一个参数值代表扩张后区域的行数,第二个参数值代表扩张后区域的列数。

再看看下面的代码:

Range('B2:D3').Resize(2,5).Select

选择单元格区域B2:F3,即向右扩张至F列,增加了2列,行数不变。此时,下面的代码将达到相同的效果(如下图所示):

Range('B2:D3').Resize(, 5).Select

即省略了第1个参数。因此,如果只沿着列方向(向右)扩张区域,可以省略第1个参数。


同理,如果只沿着行方向(向下)扩张区域,可以省略第2个参数。

接着看下面的代码:

Range('B2:E5').Select

选择单元格区域B2:E5

下面的代码:

Range('B2:E5').Resize(3,2).Select

将选择单元格区域B2:C4,如下图所示。


仔细看一下,单元格区域没有扩大,而是缩小了。可以看出,Resize属性并不是以单元格区域整体为起始来扩张的,而是以单元格区域左上角的单元格为起始单元格并包括该单元格,向右扩张第1个参数值指定的列数,向下扩张第2个参数值指定的行数。

因此,代码:

Range('B2:E5').Resize(3,2).Select

等价于:

Range('B2').Resize(3, 2).Select

对上文所讲述的内容进行小结,可得出下面的结论:

  • 无论Resize属性前面的单元格对象是单个单元格,还是单元格区域,都是以左上角的单元格为起始并包括该单元格来进行扩张。

  • 扩张后单元格区域的行列数就是Resize属性的参数所指定的数值,即第1个参数指定了最终单元格区域的行数,第2个参数指定了最终单元格区域的列数。

  • 如果省略了第1个参数,则仅向右扩张单元格区域列;如果省略了第2个参数,则仅向下扩张单元格区域行。

此外,Resize属性的参数不能为负,即不能向上或向左扩展。这与Offset属性不同。

Resize属性的语法为:

Range对象.Resize(RowSize,ColumnSize)

扩展特定的单元格,返回一个由参数RowSizeColumnSize指定行列数的单元格区域。

其中:

  • 参数RowSize指定新单元格区域的行数。若省略该参数,则新单元格区域的行数与原来相同。

  • 参数ColumnSize指定新单元格区域的列数。若省略该参数,则新单元格区域的列数与原来相同。

在上文中,我们对单元格区域B2:E5使用Resize属性,指定的参数分别为32,结果单元格区域缩小了。如果你想要确保单元格区域只会扩大,那么可以使用下面的代码:

Sub ResizeRange1()

'声明变量,代表行列数

Dim lRowNumber As Long, lColumnNumber AsLong

'获取单元格区域B2:E5的行数和列数

lRowNumber = Range('B2:E5').Rows.Count

lColumnNumber =Range('B2:E5').Columns.Count

'将单元格区域B2:E5向右扩展1,向下扩展1,得到区域B2:F6

Range('B2:E5').Resize(lRowNumber 1, lColumnNumber 1).Select

End Sub

运行代码后,将单元格区域B2:E5扩展为区域B2:F6

进一步优化代码,使用对象变量来代替单元格区域:

Sub ResizeRange2()

'声明变量,代表行列数

Dim lRowNumber As Long, lColumnNumber AsLong

'声明变量,代表单元格或单元格区域

Dim rng As Range

'给对象变量赋值

Set rng = Range('B2:E5')

'获取单元格区域的行数和列数

lRowNumber = rng.Rows.Count

lColumnNumber = rng.Columns.Count

'将单元格区域向右扩展1,向下扩展1

rng.Resize(lRowNumber 1, lColumnNumber 1).Select

End Sub

这样,只需改变对象变量rng的赋值,就可以对其所代表的区域进行相应的扩展。

--------------------------------------

如果您有更好的示例愿意分享,请给我邮件:xhdsxfjy@163.com

通过下列方式可以更快地了解完美Excel更新:

关注《完美Excel》微信公众账号:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多