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

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

语句:

Range(“A1”).Select

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

下面的语句:

Range(“A1”).Resize(1, 3).Select

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

下面的语句:

Range(“A1”).Resize(2, 3).Select

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

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

单元格的扩张——Resize属性

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

再看看下面的代码:

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

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

Range(“B2:D3”).Resize(, 5).Select

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

单元格的扩张——Resize属性

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

接着看下面的代码:

Range(“B2:E5”).Select

选择单元格区域B2:E5。

下面的代码:

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

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

单元格的扩张——Resize属性

仔细看一下,单元格区域没有扩大,而是缩小了。可以看出,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)

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

其中:

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

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

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

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的赋值,就可以对其所代表的区域进行相应的扩展。

发表回复