最近在看歷史書,到了很多國家兼并擴張的故事,很多地方你爭我奪,不亦樂乎。如果說國家的擴張源于君主的野心和利益,那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屬性并不是以單元格區域整體為起始來擴張的,而是以單元格區域左上角的單元格為起始單元格并包括該單元格,向右擴張第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的賦值,就可以對其所代表的區域進行相應的擴展。