[VBA]如何藉由使用 Excel 中的 Visual Basic 程序選取儲存格/範圍

https://support.microsoft.com/zh-tw/help/291308/how-to-select-cells-ranges-by-using-visual-basic-procedures-in-excel

Microsoft 僅提供示範性的程式設計範例,不做任何明示或默示的保證。 其中包括 (但不限於) 其適售性與適合某特定用途之默示擔保。 本文將假設您已相當熟悉示範所使用的程式設計語言,以及用於建立和偵錯程序的工具。 Microsoft 技術支援工程師可以協助說明特定程序的功能,但無法修改這些範例以提供附加功能或建構程序來滿足您的特定需求。 本文中的範例會使用下表中所列的 Visual Basic 方法。
   方法             引數
   ------------------------------------------
   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
 
本文中的範例會使用下表中的屬性。
   屬性         用途
   ---------------------------------------------------------------------
   ActiveSheet      指定使用中的工作表
   ActiveWorkbook   指定使用中的活頁簿
   Columns.Count    計算指定項目中的欄數
   Rows.Count       計算指定項目中的列數
   Selection        參照目前的選取範圍
 

1: 如何在使用中的工作表上選取儲存格

若要在使用中的工作表上選取儲存格 D5,您可以使用下列其中一個範例:
ActiveSheet.Cells(5, 4).Select
- 或 -
ActiveSheet.Range("D5").Select

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

若要在相同的活頁簿中選取另一個工作表上的儲存格 E6,您可以使用下列其中一個範例:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
   - 或 -
 
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
或者,您可以啟動工作表,然後使用上述的方法 1 來選取儲存格:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

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

若要在不同的活頁簿中選取工作表上的儲存格 F7,您可以使用下列其中一個範例:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
- 或 -
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
或者,您可以啟動工作表,然後使用上述的方法 1 來選取儲存格:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select

4: 如何在使用中的工作表上選取儲存格範圍

若要在使用中的工作表上選取範圍 C2:D10,您可以使用下列其中一個範例:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
ActiveSheet.Range("C2:D10").Select
ActiveSheet.Range("C2", "D10").Select

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

若要在相同的活頁簿中選取另一個工作表上的範圍 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

6: 如何在不同的活頁簿中選取工作表上的儲存格範圍

若要在不同的活頁簿中選取工作表上的範圍 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

7: 如何在使用中的工作表上選取具名的範圍

若要在使用中的工作表上選取具名範圍 "Test",您可以使用下列其中一個範例:
Range("Test").Select
Application.Goto "Test"

8: 如何在相同的活頁簿中選取另一個工作表上的具名範圍

若要在相同的活頁簿中選取另一個工作表上的具名範圍 "Test",您可以使用下列範例:
Application.Goto Sheets("Sheet1").Range("Test")
或者,您可以啟動工作表,然後使用上述的方法 7 來選取具名範圍:
Sheets("Sheet1").Activate
Range("Test").Select

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

若要在不同的活頁簿中選取工作表上的具名範圍 "Test",您可以使用下列範例:
Application.Goto _
   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
或者,您可以啟動工作表,然後使用上述的方法 7 來選取具名範圍:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

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

若要選取位於使用中儲存格下方五列和左邊四欄之間的儲存格,您可以使用下列範例:
ActiveCell.Offset(5, -4).Select
若要選取位於使用中儲存格上方兩列和右邊三欄之間的儲存格,您可以使用下列範例:
ActiveCell.Offset(-2, 3).Select
注意 如果嘗試選取「不在工作表之內」的儲存格,將會發生錯誤。 如果使用中儲存格是在欄 A 到 D 之間,則上面的第一個範例將會傳回錯誤,因為向左移動四欄會讓使用中儲存格置於無效的儲存格位址。 

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

若要選取位於儲存格 C7 下方五列和右邊四欄之間的儲存格,您可以使用下列其中一個範例:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
ActiveSheet.Range("C7").Offset(5, 4).Select

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

若要選取與具名範圍 "Test" 大小相同,但向下移動四列和向右移動三欄的儲存格範圍,您可以使用下列範例:
ActiveSheet.Range("Test").Offset(4, 3).Select
如果具名範圍是在另一個 (不是使用中) 工作表上,請先啟動該工作表,然後使用下列範例來選取範圍:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

13: 如何選取指定範圍和調整選取範圍大小

若要選取具名範圍 "Database",然後將選取範圍延伸五列,您可以使用下列範例:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, _
   Selection.Columns.Count).Select

14: 如何選取指定範圍、進行位移,然後調整大小

若要選取位於具名範圍 "Database" 下方四列和右邊三欄的範圍,並包括大於具名範圍兩列和一欄,您可以使用下列範例:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _
   Selection.Columns.Count + 1).Select

15: 如何選取兩個指定範圍以上的聯集

若要選取兩個具名範圍 "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 method of application class failed (應用程式類別的 Union 方法失敗)

16: 如何選取兩個指定範圍以上的交集

若要選取兩個具名範圍 "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
 

17: 如何選取連續資料欄的最後一個儲存格

若要選取連續欄中的最後一個儲存格,請使用下列範例:
ActiveSheet.Range("a1").End(xlDown).Select
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A4。


18: 如何選取連續資料欄下方的空白儲存格

若要選取連續儲存格範圍下面的儲存格,請使用下列範例:
ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A5。


19: 如何在欄中選取連續儲存格的整個範圍

若要在欄中選取連續儲存格範圍,請使用下列其中一個範例:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
   - 或 -
 
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _
      End(xlDown).Address).Select
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A1 到 A4。 

20: 如何在欄中選取非連續儲存格的整個範圍

若要選取非連續的儲存格範圍,請使用下列其中一個範例:
ActiveSheet.Range("a1",ActiveSheet.Range("a65536").End(xlUp)).Select
   - 或 -
 
ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _
   End(xlUp).Address).Select
當這個程式碼與範例資料表搭配使用時,會選取儲存格 A1 到 A6。 

21: 如何選取矩形儲存格範圍

若要選取某儲存格四周的矩形儲存格範圍,請使用 CurrentRegion 方法。 透過 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。 在此範例中,CurrentRegion 方法沒有作用,因為第 5 列是空白行。 下列範例會選取所有儲存格:
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

22: 如何選取不同長度的多個非連續欄

若要選取不同長度的多個非連續欄,請使用下列範例資料表和巨集範例:
   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 物件。 例如:
    Application.Goto Sheets("Sheet1").Range( _
          Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), _
          Sheets("Sheet1").Cells(4, 5)))
  • 針對引號中的任何項目而言 (例如,具名範圍 "Test"),您也可以使用其值是文字字串的變數。 例如,與其使用
    ActiveWorkbook.Sheets("Sheet1").Activate
    您可以使用
    ActiveWorkbook.Sheets(myVar).Activate
    其中 myVar 的值是 "Sheet1"。

留言

這個網誌中的熱門文章

[VB6]使用File Dialog選擇檔案

[VB6]MSFlexGrid使用記錄