VBA代碼下引用Excel單元格區域的技巧
在VBA代碼中引用Excel工作表中單元格區域的方式小結
問題一:在VBA代碼中,如何引用當前工作表中的單個單元格(例如引用單元格C3)?
回答:可以使用下面列舉的任一方式對當前工作表中的單元格(C3)進行引用。
(1) Range("C3")
(2) [C3]
(3) Cells(3, 3)
(4) Cells(3, "C")
(5) Range("C4").Offset(-1)
Range("D3").Offset(, -1)
Range("A1").Offset(2, 2)
(6) 若C3為當前單元格,則可使用:ActiveCell
(7) 若將C3單元格命名為“Range1”,則可使用:Range("Range1")或[Range1]
(8) Cells(4, 3).Offset(-1)
(9) Range("A1").Range("C3")
問題二:在VBA代碼中,我要引用當前工作表中的B2:D6單元格區域,有哪些方式?
回答:可以使用下面列舉的任一方式對當前工作表中單元格區域B2:D6進行引用。
(1) Range(“B2:D6”)
(2) Range("B2", "D6")
(3) [B2:D6]
(4) Range(Range("B2"), Range("D6"))
(5) Range(Cells(2, 2), Cells(6, 4))
(6) 若將B2:D6區域命名為“MyRange”,則又可以使用下面的語句引用該區域:
① Range("MyRange")
② [MyRange]
(7) Range("B2").Resize(5, 3)
(8) Range("A1:C5").Offset(1, 1)
(9) 若單元格B2為當前單元格,則可使用語句:Range(ActiveCell, ActiveCell.Offset(4, 2))
(10) 若單元格D6為當前單元格,則可使用語句:Range("B2", ActiveCell)
問題三:在VBA代碼中,如何使用變量實現對當前工作表中不確定單元格區域的引用?
回答:有時,我們需要在代碼中依次獲取工作表中特定區域內的單元格,這通常可以采取下面的幾種方式:
(1) Range(“A” & i)
(2) Range(“A” & i & “:C” & i)
(3) Cells(i,1)
(4) Cells(i,j)
其中,i、j為變量,在循環語句中指定i和j的范圍后,依次獲取相應單元格。
問題四:在VBA代碼中,如何擴展引用當前工作表中的單元格區域?
回答:可以使用Resize屬性,例如:
(1) ActiveCell.Resize(4, 4),表示自當前單元格開始創建一個4行4列的區域。
(2) Range("B2").Resize(2, 2),表示創建B2:C3單元格區域。
(3) Range("B2").Resize(2),表示創建B2:B3單元格區域。
(4) Range("B2").Resize(, 2),表示創建B2:C2單元格區域。
如果是在一個單元格區域(如B3:E6),或一個命名區域中(如將單元格區域B3:E6命名為“MyRange”)使用Resize屬性,則只是相對于單元格區域左上角單元格擴展區域,例如:
代碼Range("C3:E6").Resize(, 2),表示單元格區域C3:D6,并且擴展的單元格區域可不在原單元格區域內。
因此,可以知道Resize屬性是相對于當前活動單元格或某單元格區域中左上角單元格按指定的行數或列數擴展單元格區域。
問題五:在VBA代碼中,如何在當前工作表中基于當前單元格區域或指定單元格區域處理其它單元格區域?
回答:可以使用Offset屬性,例如:
(1) Range("A1").Offset(2, 2),表示單元格C3。
(2) ActiveCell.Offset(, 1),表示當前單元格下一列的單元格。
(3) ActiveCell.Offset(1),表示當前單元格下一行的單元格。
(4) Range("C3:D5").Offset(, 1),表示單元格區域D3:E5,即將整個區域偏移一列。
從上面的代碼示例可知,Offset屬性從所指定的單元格開始按指定的行數和列數偏移,從而到達目的單元格,但偏移的行數和列數不包括指定單元格本身。
問題六:在VBA代碼中,如何在當前工作表中引用交叉區域?
回答:可以使用Intersect方法,例如:
Intersect(Range("C3:E6"), Range("D5:F8")),表示單元格區域D5:E6,即單元格區域C3:E6與D5:F8相重迭的區域。
問題七:在VBA代碼中,如何在當前工作表中引用多個區域?
回答:
(1) 可以使用Union方法,例如:
Union(Range("C3:D4"), Range("E5:F6")),表示單元格區域C3:D4和E5:F6所組成的區域。
Union方法可以將多個非連續區域連接起來成為一個區域,從而可以實現對多個非連續區域一起進行操作。
(2) 也可以使用下面的代碼:
Range("C3:D4, E5:F6")或[C3:D4, E5:F6]
注意:Range("C3:D4",
"F5:G6"),表示單元格區域C3:G6,即將兩個區域以第一個區域左上角單元格為起點,以第二個區域右下角單元格為終點連接成一個新區域。
同時,在引用區域后使用Rows屬性和Columns屬性時,注意下面代碼的區別:
①Range("C3:D4", "F8:G10").Rows.Count,返回的值為8;
②Range("C3:D4,F8:G10").Rows.Count,返回的值為2,即只計算第一個單元格區域。
問題八:在VBA代碼中,如何引用當前工作表中活動單元格或指定單元格所在的區域(當前區域)?
回答:可以使用CurrentRegion屬性,例如:
(1) ActiveCell.CurrentRegion,表示活動單元格所在的當前區域。
(2) Range("D5").CurrentRegion,表示單元格D5所在的當前區域。
當前區域是指周圍由空行或空列所圍成的區域。該屬性的詳細使用參見《CurrentRegion屬性示例》一文。
問題九:在VBA代碼中,如何引用當前工作表中已使用的區域?
回答:可以使用UsedRange屬性,例如:
(1) Activesheet.UsedRange,表示當前工作表中已使用的區域。
(2) Worksheets("sheet1").UsedRange,表示工作表sheet1中已使用的區域。
與CurrentRegion屬性不同的是,該屬性代表工作表中已使用的單元格區域,包括顯示為空行,但已進行過格式的單元格區域。該屬性的詳細使用參見《解析UsedRange屬性》一文。
問題十:如何在單元格區域內指定特定的單元格?
回答:可以使用Item屬性,例如:
(1)
Range("A1:B10").Item(5,3)指定單元格C5,這個單元格處于以區域中左上角單元格A1(即區域中第1行第1列的單元格)為起點的第5行第3列。因為Item屬性為默認屬性,因此也可以簡寫為:Range("A1:B10")(5,3)。
如果將A1:B10區域命名為”MyRange”,那么Range("MyRange")(5,3)也指定單元格C5。
(2) Range("A1:B10")(12,13)指定單元格M12,即用這種方式引用單元格,該單元格不必一定要包含在區域內。
同時,也不需要索引數值是正值,例如:
① Range("D4:F6")(0,0)代表單元格C3;
② Range("D4:F6")(-1,-2)代表單元格A2。
而Range("D4:F6")(1,1)代表單元格D4。
(3) 也可以在單元格區域中循環,例如:
Range("D4:F6")(2,2)(3,4)代表單元格H7,即該單元格位于作為左上角單元格E5的第3行第4列(因為E5是開始于區域中左上角單元格D4起的第2行第2列)。
(4) 也能使用一個單個的索引數值進行引用。計數方式為從左向右,即在區域中的第一行開始從左向右計數,第一行結束后,然后從第二行開始從左到右接著計數,依次
類推。(注:從區域中第一行第一個單元格開始計數,當第一行結束時,轉入第二行最左邊的單元格,這樣按一行一行從左向右依次計數。以單元格區域中第1個單
元格開始,按上述規則依次為第2個單元格、第3個單元格….等等),例如:
Range("A1:B2")(1) 代表單元格A1;
Range("A1:B2")(2) 代表單元格B1;
Range("A1:B2")(3) 代表單元格A2;
Range("A1:B2")(4) 代表單元格B2。
這種方法可在工作表中連續向下引用單元格(即不一定是在單元格區域內,但在遵循相同的規律),例如:
Range("A1:B2")(5)代表單元格A3;
Range("A1:B2")(14)代表單元格B7,等等。
也可以使用單個的負數索引值。
這種使用單個索引值的方法對遍歷列是有用的,例如,Range("D4")(1)代表單元格D4,Range("D4")(2)代表單元格D5,Range
("D4")(11)代表單元格D14,等等。
同理,稍作調整后也可遍歷行,例如:
Range("D4").Columns(2)代表單元格E4,Range("D4").Columns(5)指定單元格H4,等等。
(5)當與對象變量配合使用時,Item屬性能提供簡潔并有效的代碼,例如:
Set rng = Worksheets(1).[a1]
定義了對象變量后,像單元格方法一樣,Item屬性允許使用兩個索引數值引用工作表中的任一單元格,例如,rng(3,4)指定單元格D3。(By Chip
Pearson)
問題十一:在VBA代碼中,如何引用當前工作表中的整行或整列?
回答:見下面的示例代碼:
(1) Range("C:C").Select,表示選擇C列。
Range("C:E").Select,表示選擇C列至E列。
(2) Range("1:1").Select,表示選擇第一行。
Range("1:3").Select,表示選擇第1行至第3行。
(3) Range("C:C").EntireColumn,表示C列;
Range("D1").EntireColumn,表示D列。
同樣的方式,也可以選擇整行,然后可以使用如AutoFit方法對整列或整行進行調整。
問題十二:在VBA代碼中,如何引用當前工作表中的所有單元格?
回答:可以使用下面的代碼:
(1) Cells,表示當前工作表中的所有單元格。
(2) Range(Cells(1, 1), Cells(Cells.Rows.Count, Cells.
Columns.Count)),其中Cells.Rows表示工作表所有行,Cells. Columns表示工作表所有列。
問題十三:在VBA代碼中,如何引用工作表中的特定單元格區域?
回答:在工作表中,您可能使用過“定位條件”對話框。可以通過選擇菜單“編輯——定位”,單擊“定位”對話框中的“定位條件”按鈕顯示該對話框。這個對話框可以允許用戶選擇特定的單元格。例如:
(1)
Worksheets("sheet1").Cells.SpecialCells(xlCellTypeAllFormatConditions),表示工作表sheet1中由帶有條件格式的單元格所組成的區域。
(2)
ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks),表示當前工作表中活動單元格所在區域中所有空白單元格所組成的區域。
問題十四:在VBA代碼中,如何引用其它工作表或其它工作簿中的單元格區域?
回答:要引用其它工作表或其它工作簿中的單元格區域,只需在單元格對象前加上相應的引用對象即可,例如:
(1) Worksheets(“Sheet3”).Range(“C3:D5”),表示引用工作表sheet3中的單元格區域C3:D5。
(2)
Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”),表示引用MyBook工作簿中工作表Sheet1上的單元格B2。
問題十五:還有其它的一些情形嗎?
回答:列舉如下:
(1)
Cells(15),表示單元格O1,即可在Cells屬性中指定單元格數字來選擇單元格,其計數順序為自左至右、從上到下,又如Cells(257),表示單元格B1。
(2) Cells(, 256),表示單元格IV1,但是如果Cells(, 257),則會返回錯誤。
結語
我們用VBA對Excel進行處理,一般是對其工作表中的數據進行處理,因此,引用單元格區域是ExcelVBA編程中最基本的操作之一,只有確定了所處理的單元格區域,才能使用相應的屬性和方法進行下一步的操作。
上面列舉了一些引用單元格區域的情形和方式,可以看出,引用單元格區域有很多方式,有一些可能不常用,可以根據工作表的所處的環境和個人編程習慣進行選擇使用。
當然,在編寫程序時,也可能會將上面的一些屬性聯合使用,以達到選取特定操作對象的目的,例如Offset屬性、Resize屬性、CurrentRegion屬性、UsedRange屬性等的組合。
[!--empirenews.page--]
如何選擇當前工作表中的單元格?
例如,可以使用下面的代碼選擇當前工作表中的單元格D5:
ActiveSheet.Cells(5, 4).Select
或:ActiveSheet.Range("D5").Select
如何選擇同一工作簿中其它工作表上的單元格?
例如,要選擇同一工作簿中另一工作表上的單元格E6,可以使用下面的代碼:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
或:Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
也可以先激活該工作表,然后再選擇:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select
如何選擇不同工作簿中的單元格?
例如,要選擇另一工作簿中的一個工作表上的單元格F7,可以使用下面的代碼:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
也可以先激活該工作簿中的工作表,然后再選擇:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select
如何選擇當前工作表中的單元格區域?
例如,要選擇當前工作表中的單元格區域C2:D10,可以使用下面的代碼:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
或:ActiveSheet.Range("C2:D10").Select
或:ActiveSheet.Range("C2", "D10").Select
如何選擇同一工作簿中另一工作表上的單元格區域?
例如,要選擇同一工作簿中另一工作表上的單元格區域D3:E11,可以使用下面的代碼:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
或:Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
也可以先激活該工作表,然后再選擇:
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select
如何選擇不同工作簿中工作表上的單元格區域?
例如,要選擇另一工作簿中某工作表上的單元格區域E4:F12,可以使用下面的代碼:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
也可以先激活該工作表,然后再選擇:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select
如何在當前工作表中選擇命名區域?
例如,要選擇當前工作表中名為“Test”的區域,可以使用下面的代碼:
Range("Test").Select
或:Application.Goto "Test"
如何選擇同一工作簿中另一工作表上的命名區域?
例如,選擇同一工作簿中另一工作表上名為“Test”的區域,可使用下面的代碼:
Application.Goto Sheets("Sheet1").Range("Test")
也可以先激活工作表,再選擇:
Sheets("Sheet1").Activate
Range("Test").Select
如何選擇不同工作簿中工作表上的命名區域?
例如,要選擇不同工作簿中工作表上名為“Test”的區域,可使用下面的代碼:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
也可以先激活工作表,再選擇:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select
如何選擇與當前單元格相關的單元格?
例如,要選擇距當前單元格下面5行左側4列的單元格,可以使用下面的代碼:
ActiveCell.Offset(5, -4).Select
要選擇距當前單元格上方2行右側3列的單元格,可以使用下面的代碼:
ActiveCell.Offset(-2, 3).Select
注意:一定要保證當前單元格與所選單元格之間的距離在工作表范圍內,否則會出錯。
如何選擇與另一單元格(不是當前單元格)相關的單元格?
例如,要選擇距單元格C7下方5行右側4列的單元格,可以使用下面的代碼:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
或:ActiveSheet.Range("C7").Offset(5, 4).Select
如何選擇偏離指定區域的一個單元格區域?
例如,要選擇與名為“Test”的區域大小相同但在該區域下方4行右側3列的一個區域,可以使用下面的代碼:
ActiveSheet.Range("Test").Offset(4, 3).Select
如果該命名區域不在當前工作表中,可以先激活該工作表,然后再選擇,如下面的代碼:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
如何選擇一個指定的區域并擴展區域的大小?
例如,要選擇當前工作表中名為“Database”區域,然后將該區域向下擴展5行,可以使用下面的代碼:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select
如何選擇一個指定的區域,再偏離,然后擴展區域的大小?
例如,選擇名為“Database”區域下方4行右側3列的一個區域,然后擴展2行和1列,可以使用下面的代碼:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, Selection.Columns.Count + 1).Select
如何選擇兩個或多個指定區域?
例如,為了同時選擇名為“Test”和“Sample”的兩個區域,可以使用下面的代碼:
Application.Union(Range("Test"), Range("Sample")).Select
注意,這兩個區域須在同一工作表中,如下面的代碼:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
但Union方法不能處理不同工作表中的區域,可下面的代碼:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))
將會出錯。
如何選擇兩個或多個指定區域的交叉區域?
例如,要選擇名為“Test”和“Sample”的兩個區域的交叉區域,可以使用下面的代碼:
Application.Intersect(Range("Test"), Range("Sample")).Select
注意,兩個區域必須在同一工作表中。
= = = = = = = = = = = = = = = = = = = = = = = = =
下面的示例使用了如下圖所示的工作表。

如何選擇連續數據列中的最后一個單元格?
例如,要選擇一個連續列中的最后一個單元格,可以使用下面的代碼:
ActiveSheet.Range("a1").End(xlDown).Select
該代碼使用在上面的工作表中,單元格A4被選擇。
如何選擇連續數據列底部的空單元格?
例如,要選擇連續單元格區域下面的單元格,可以使用下面的代碼:
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
該代碼使用在上面的工作表中,單元格A5被選擇。
如何選擇某列中連續數據單元格區域?
例如,要選擇一列中的連續數據單元格區域,可以使用下面的代碼:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select
該代碼使用在上面的工作表中,單元格區域A1:A4將被選擇。
如何選擇某列中非連續數據單元格區域?
例如,要選擇某列中非連續數據單元格區域,可以使用下面的代碼:
ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select
該代碼使用在上面的工作表中,單元格區域A1:A6將被選擇。
如何選擇一個矩形(規則的)單元格區域?
要選擇圍繞某單元格的一個矩形區域,可以使用CurrentRegion方法。CurrentRegion方法將選擇四周被空行和空列圍繞的區域,如下面的代碼:
ActiveSheet.Range("a1").CurrentRegion.Select
該代碼使用在上面的工作表中,將選擇單元格區域A1:C4。也可以使用下面的代碼:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
或:
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
若想選擇單元格區域A1:C6,可使用下面的代碼:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
或:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select
= = = = = = = = = = = = = = = = = = = =
如何選擇多個不同長度的非連續列?
例如,有下圖所示的工作表:

要同時選擇A列和C列中的數據,即單元格區域A1:A3和C1:C6,可使用下面的代碼:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a, b).Select
= = = = = = = = = = = = = = = = = = = =
注:使用Application.Goto方法,如果指定另一工作表(不是當前工作表)中的指定區域,在Range屬性中使用兩個Cells屬性時,則必須包括Sheets對象,如:
Application.Goto Sheets("Sheet1").Range(Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), Sheets("Sheet1").Cells(4, 5)))
= = = = = = = = = = = = = = = = = = = =
在VBA中,Range 對象既可表示單個單元格,也可表示單元格區域。下面的內容說明了標識和處理Range對象最常用的方法。
引用工作表上的所有單元格
如果對工作表應用 Cells 屬性時不指定索引號,該方法將返回代表工作表上所有單元格的 Range 對象。以下 Sub 過程清除活動工作簿中 Sheet1 上的所有單元格的內容。
Sub ClearSheet()
Worksheets("Sheet1").Cells.ClearContents
End Sub
使用 A1 表示法引用單元格和區域
可使用 Range 屬性引用 A1 引用樣式中的單元格或單元格區域。下述子例程將單元格區域 A1:D5 的字體設置為加粗。
Sub FormatRange()
Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _
.Font.Bold = True
End Sub
下表演示了使用 Range 屬性的一些 A1 樣式引用。
引用 含義
Range("A1") 單元格 A1
Range("A1:B5") 從單元格 A1 到單元格 B5 的區域
Range("C5:D9,G9:H16") 多塊選定區域
Range("A:A") A 列
Range("1:1") 第一行
Range("A:C") 從 A 列到 C 列的區域
Range("1:5") 從第一行到第五行的區域
Range("1:1,3:3,8:8") 第 1、3 和 8 行
Range("A:A,C:C,F:F") A 、C 和 F 列
[!--empirenews.page--]
引用行和列
可用 Rows 屬性或 Columns 屬性來處理整行或整列。這兩個屬性返回代表單元格區域的 Range 對象。在下例中,Rows(1) 返回 Sheet1 上的第一行,然后將區域字體加粗。
Sub RowBold()
Worksheets("Sheet1").Rows(1).Font.Bold = True
End Sub
下表舉例說明了使用 Rows 和 Columns 屬性的一些行和列的引用。
引用 含義
Rows(1) 第一行
Rows 工作表上所有的行
Columns(1) 第一列
Columns("A") 第一列
Columns 工作表上所有的列
若要同時處理若干行或列,可創建一個對象變量并使用 Union 方法,將對 Rows 屬性或 Columns 屬性的多個調用組合起來。下例將活動工作簿中第一張工作表上的第一行、第三行和第五行的字體設置為加粗。
Sub SeveralRows()
Worksheets("Sheet1").Activate
Dim myUnion As Range
Set myUnion = Union(Rows(1), Rows(3), Rows(5))
myUnion.Font.Bold = True
End Sub
使用索引號引用單元格
通過使用行列索引號,可用 Cells 屬性引用單個單元格。該屬性返回代表單個單元格的 Range 對象。在下例中,Cells(6,1) 返回 Sheet1 上的單元格 A6,然后將 Value 屬性設置為 10。
Sub EnterValue()
Worksheets("Sheet1").Cells(6, 1).Value = 10
End Sub
因為可用變量替代編號,所以 Cells 屬性非常適合于在單元格區域中循環,如下例中所示。
Sub CycleThrough()
Dim Counter As Integer
For Counter = 1 To 20
Worksheets("Sheet1").Cells(Counter, 3).Value = Counter
Next Counter
End Sub
如果要同時更改某個區域中所有單元格的屬性(或將方法應用于該區域中的所有單元格),建議使用 Range 屬性。
使用快捷表示法引用單元格
可用方括號將 A1 引用樣式或命名區域括起來,作為 Range 屬性的快捷方式。這樣就不必鍵入單詞“Range”或使用引號了,如下例中所示。
Sub ClearRange()
Worksheets("Sheet1").[A1:B5].ClearContents
End Sub
Sub SetValue()
[MyRange].Value = 30
End Sub
使用 Range 對象引用單元格
如果將對象變量設置為 Range 對象,即可用變量名輕松地操作單元格區域。
以下過程將創建對象變量 myRange,然后將活動工作簿中 Sheet1 上的區域 A1:D5 賦予該變量。隨后的語句用該變量名稱代替 Range 對象,以修改該區域的屬性。
Sub Random()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:D5")
myRange.Formula = "=RAND()"
myRange.Font.Bold = True
End Sub
引用命名區域
用名稱比用 A1 樣式記號更容易標識單元格區域。若要命名選定的單元格區域,請單擊編輯欄左端的名稱框,鍵入名稱,再按 Enter。
引用命名區域
以下示例引用名為“MyBook.xls”的工作簿中名為“MyRange”的區域。
Sub FormatRange()
Range("MyBook.xls!MyRange").Font.Italic = True
End Sub
以下示例引用名為“Report.xls”的工作簿中特定于工作表的區域“Sheet1!Sales”。
Sub FormatSales()
Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin
End Sub
要選定命名區域,可使用 GoTo 方法,該方法將激活工作簿和工作表,然后選定該區域。
Sub ClearRange()
Application.Goto Reference:="MyBook.xls!MyRange"
Selection.ClearContents
End Sub
以下示例顯示對于活動工作簿將如何編寫與上例相同的過程。
Sub ClearRange()
Application.Goto Reference:="MyRange"
Selection.ClearContents
End Sub
在命名區域中的單元格上循環
下例用 For Each...Next 循環語句在命名區域中的每一個單元格上循環。如果該區域中的任一單元格的值超過 limit 的值,就將該單元格的顏色更改為黃色。
Sub ApplyColor()
Const Limit As Integer = 25
For Each c In Range("MyRange")
If c.Value > Limit Then
c.Interior.ColorIndex = 27
End If
Next c
End Sub
引用多個區域
使用適當的方法可以很容易地同時引用多個單元格區域。可用 Range 和 Union 方法引用任意組合的單元格區域;用 Areas 屬性可引用工作表上選定的一組單元格區域。
使用 Range 屬性
通過在兩個或多個引用之間插入逗號,可使用 Range 屬性引用多個區域。以下示例清除了 Sheet1 上三個區域的內容。
Sub ClearRanges()
Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _
ClearContents
End Sub
命名區域使得用 Range 屬性處理多個區域更加容易。以下示例可在所有這三個命名區域處于同一工作表時運行。
Sub ClearNamed()
Range("MyRange, YourRange, HisRange").ClearContents
End Sub
使用 Union 方法
使用 Union 方法可將多個區域組合到一個 Range 對象中。以下示例創建了名為 myMultipleRange 的 Range 對象,并將其定義為區域 A1:B2 和 C3:D4 的組合,然后將該組合區域的字體設置為加粗。
Sub MultipleRange()
Dim r1, r2, myMultipleRange As Range
Set r1 = Sheets("Sheet1").Range("A1:B2")
Set r2 = Sheets("Sheet1").Range("C3:D4")
Set myMultipleRange = Union(r1, r2)
myMultipleRange.Font.Bold = True
End Sub
使用 Areas 屬性
可用 Areas 屬性引用選定的單元格區域或多塊選定區域中的區域集合。下述過程計算選定區域中的塊數目,如果有多個塊,就顯示一則警告消息。
Sub FindMultiple()
If Selection.Areas.Count > 1 Then
MsgBox "不能對多個選區進行操作."
End If
End Sub
處理三維區域
如果要處理若干工作表上相同位置的單元格區域,可用 Array 函數選定兩張或多張工作表。下例設置三維單元格區域的邊框格式。
Sub FormatSheets()
Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select
Range("A1:H1").Select
Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub
下例應用 FillAcrossSheets 方法,將 Sheet2 上的區域中的格式和所有數據傳送到活動工作簿中所有工作表上的相應區域。
Sub FillAll()
Worksheets("Sheet2").Range("A1:H1") _
.Borders(xlBottom).LineStyle = xlDouble
Worksheets.FillAcrossSheets (Worksheets("Sheet2") _
.Range("A1:H1"))
End Sub
小伙伴,大家一起學習Excel VBA知識,一起進步。同時歡迎大家幫忙轉發并關注,謝謝大家的支持!