最近在看历史书,到了很多国家兼并扩张的故事,很多地方你争我夺,不亦乐乎。如果说国家的扩张源于君主的野心和利益,那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属性的第一个参数值代表扩张后的行数,第二个参数值代表扩张后的列数。
实际上,当在与起始单元格相同的行中进行扩张时,可以省略第一个参数,例如上述代码:
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)
扩展特定的单元格,返回一个由参数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的赋值,就可以对其所代表的区域进行相应的扩展。