Share via


如何在 Excel 中使用 Visual Basic 程式選取儲存格/範圍

Microsoft 提供的程式設計範例僅供說明之用,並不具任何明示或暗示的責任擔保。 這包括 (但不限於) 任何目的之適售性及適用性的暗示責任擔保。 本文假設您熟悉示範的程式設計語言,也熟悉用以建立和偵錯程序的工具。 Microsoft 技術支援工程師可以協助說明特定程序的功能,但不會修改這些範例以提供附加功能或建構程序來滿足您的特定需求。 本文中的範例使用下表所列的 Visual Basic 方法。

Method             Arguments
------------------------------------------
Activate           none
Cells              rowIndex, columnIndex
Application.Goto   reference, scroll
Offset             rowOffset, columnOffset
Range              cell1
                   cell1, cell2
Resize             rowSize, columnSize
Select             none
Sheets             index (or sheetName)
Workbooks          index (or bookName)
End                direction
CurrentRegion      none

本文中的範例會使用下表中的屬性。

Property         Use
---------------------------------------------------------------------
ActiveSheet      to specify the active sheet
ActiveWorkbook   to specify the active workbook
Columns.Count    to count the number of columns in the specified item
Rows.Count       to count the number of rows in the specified item
Selection        to refer to the currently selected range

如何在 Active Worksheet 上選取儲存格

若要選取使用中工作表上的儲存格 D5,您可以使用下列其中一個範例:

ActiveSheet.Cells(5, 4).Select
-or-
ActiveSheet.Range("D5").Select

如何在相同活頁簿的另一個工作表上選取儲存格

若要在相同活頁簿中的另一個工作表上選取儲存格 E6,您可以使用下列其中一個範例:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   -or-
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

或者,您可以啟動工作表,然後使用上述方法 1 來選取儲存格:

Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

如何在不同活頁簿的工作表上選取儲存格

若要在不同活頁簿的工作表上選取儲存格 F7,您可以使用下列其中一個範例:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
-or-
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

或者,您可以啟動工作表,然後使用上述方法 1 來選取儲存格:

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

or

ActiveSheet.Range(ActiveSheet.Cells(2, 3), ActiveSheet.Cells(10, 4)).Select

or, alternatively, it could be simplified to this:

Range(Cells(2, 3), Cells(10, 4)).Select

如何在相同活頁簿的另一個工作表上選取儲存格範圍

若要在相同活頁簿中的另一個工作表上選取範圍 D3:E11,您可以使用下列其中一個範例:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

或者,您可以啟動工作表,然後使用上述方法 4 來選取範圍:

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")

或者,您可以啟動工作表,然後使用上述方法 4 來選取範圍:

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")

或者,您可以啟動工作表,然後使用上述方法 7 來選取具名範圍:

Sheets("Sheet1").Activate
Range("Test").Select

如何在不同活頁簿的工作表上選取具名範圍

若要在不同活頁簿的工作表上選取命名範圍 「Test」,您可以使用下列範例:

Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

或者,您可以啟動工作表,然後使用上述方法 7 來選取具名範圍:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

如何選取相對於使用中儲存格的儲存格

若要選取下方五列的儲存格,以及使用中儲存格左邊的四個數據行,您可以使用下列範例:

ActiveCell.Offset(5, -4).Select

若要選取使用中儲存格右側兩列和三欄的儲存格,您可以使用下列範例:

ActiveCell.Offset(-2, 3).Select

注意事項

如果您嘗試選取「不在工作表外」的儲存格,就會發生錯誤。如果使用中儲存格位於 A 到 D 的資料行中,則上述第一個範例會傳回錯誤,因為將四個數據行移至左邊會將使用中儲存格帶至不正確儲存格位址。

如何選取相對於另一個儲存格的儲存格 (不是作用中) 儲存格

若要選取下方五列的儲存格,以及儲存格 C7 右邊的四個數據行,您可以使用下列其中一個範例:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

如何從指定的範圍選取儲存格位移的範圍

若要選取與具名範圍 「Test」 大小相同,但已向下移四列和右邊三欄的儲存格範圍,您可以使用下列範例:

ActiveSheet.Range("Test").Offset(4, 3).Select

如果具名範圍位於另一個 (不是使用中) 工作表,請先啟動該工作表,然後使用下列範例選取範圍:

Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

如何選取指定的範圍並調整選取範圍的大小

若要選取命名範圍 「Database」,然後將選取範圍延伸五個數據列,您可以使用下列範例:

Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select

如何選取指定的範圍、位移它,然後調整其大小

若要選取下列四個數據列和命名範圍 「Database」 右邊的三個數據行,並包含兩個數據列和一個超過具名範圍的資料行,您可以使用下列範例:

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

注意事項

這兩個範圍必須位於相同的工作表上,此範例才能運作。 另請注意,Union 方法無法跨工作表運作。 例如,這一行運作正常。

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))

但這一行

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))

會傳回錯誤訊息:

應用程式類別的 Union 方法失敗

如何選取兩個或多個指定範圍的交集

若要選取兩個具名範圍 「Test」 和 「Sample」 的交集,您可以使用下列範例:

Application.Intersect(Range("Test"), Range("Sample")).Select

請注意,這兩個範圍必須位於相同的工作表上,此範例才能運作。

本文中的範例 17-21 參閱下列資料範例集。 每個範例都會說明要選取之範例資料中的儲存格範圍。

A1: Name    B1: Sales    C1: Quantity
A2: a       B2: $10      C2: 5
A3: b       B3:          C3: 10
A4: c       B4: $10      C4: 5
A5:         B5:          C5:
A6: Total   B6: $20      C6: 20

如何選取連續資料之資料行的最後一個資料格

若要選取連續資料行中的最後一個儲存格,請使用下列範例:

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
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select

當此程式碼與範例資料表搭配使用時,將會選取儲存格 A1 到 A4。

如何選取資料行中非連續儲存格的整個範圍

若要選取非連續儲存格的範圍,請使用下列其中一個範例:

ActiveSheet.Range("a1",ActiveSheet.Range("a" & ActiveSheet.Rows.Count).End(xlUp)).Select
   -or-
ActiveSheet.Range("a1:" & ActiveSheet.Range("a" & ActiveSheet.Rows.Count). _
   End(xlUp).Address).Select

當此程式碼與範例資料表搭配使用時,它會選取儲存格 A1 到 A6。

如何選取儲存格的矩形範圍

若要選取儲存格周圍儲存格的矩形範圍,請使用 CurrentRegion 方法。 CurrentRegion 方法所選取的範圍是由任何空白資料列和空白資料行組合所系結的區域。 以下是如何使用 CurrentRegion 方法的範例:

ActiveSheet.Range("a1").CurrentRegion.Select

此程式碼會選取儲存格 A1 到 C4。 以下列出選取相同儲存格範圍的其他範例:

ActiveSheet.Range("a1", _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
   -or-
ActiveSheet.Range("a1:" & _
   ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

在某些情況下,您可能想要選取儲存格 A1 到 C6。 在此範例中,CurrentRegion 方法將無法運作,因為第 5 列有空白行。 下列範例會選取所有儲存格:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
    -or-
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & _
   ActiveSheet.Cells(lastRow, lastCol).Address).Select

如何選取長度不同的多個非連續資料行

若要選取長度不同的多個非連續資料行,請使用下列範例資料表和宏範例:

A1: 1  B1: 1  C1: 1  D1: 1
A2: 2  B2: 2  C2: 2  D2: 2
A3: 3  B3: 3  C3: 3  D3: 3
A4:    B4: 4  C4: 4  D4: 4
A5:    B5: 5  C5: 5  D5:
A6:    B6:    C6: 6  D6:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a,b).Select

當此程式碼與範例資料表搭配使用時,將會選取儲存格 A1:A3 和 C1:C6。

範例的注意事項

通常可以省略 ActiveSheet 屬性,因為如果未命名特定工作表,則會隱含此屬性。 例如,而不是

ActiveSheet.Range("D5").Select

您可以使用:

Range("D5").Select

通常也可以省略 ActiveWorkbook 屬性。 除非指定特定活頁簿,否則會隱含使用中的活頁簿。

當您使用 Application.Goto 方法時,如果您想要在 Range 方法內使用兩個 Cells 方法,當指定的範圍在另一個 (不是作用中) 工作表時,您必須每次都包含 Sheets 物件。 例如:

    With ActiveWorkbook.Sheets("Sheet1")
        Application.Goto .Range(.Cells(2, 3), .Cells(4, 5))
    End With

例如,對於引號 (中的任何專案,具名範圍 「Test」 ) ,您也可以使用其值為文字字串的變數。 例如,而不是

ActiveWorkbook.Sheets("Sheet1").Activate

您可以使用

ActiveWorkbook.Sheets(myVar).Activate

其中 myVar 的值為 「Sheet1」。