你目前正处于脱机状态,正在等待 Internet 重新连接

如何在 Excel 中使用 Visual Basic 程序选择单元格/范围

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

更多信息
Microsoft 提供的编程示例只用于演示目的,不带任何明示或暗示担保。 这包括但不限于对适销性或特定用途适用性的暗示担保。 本文假定您熟悉演示的编程语言以及用于创建和调试过程的工具。 Microsoft 的支持工程师可以帮助解释某个特定过程的功能。但是,他们不会修改这些示例以提供额外的功能或构建过程来满足您的特定要求。 本文中的示例将使用下表中所列的 Visual Basic 方法。
   方法               参数   ------------------------------------------   Activate           无   Cells              rowIndex, columnIndex   Application.Goto   reference, scroll   Offset             rowOffset, columnOffset   Range              cell1                      cell1, cell2   Resize             rowSize, columnSize   Select             none   Sheets             index(或 sheetName)   Workbooks          index(或 bookName)   End                direction   CurrentRegion      无				
本文中的示例将使用下表中所列的属性。
   属性            作用   ---------------------------------------------------------------------   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").ActivateActiveSheet.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").ActivateActiveSheet.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").ActivateActiveSheet.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").ActivateRange("Test").Select				

9:如何在另一工作簿中的工作表上选择命名区域

若要在另一工作簿中的工作表上选择命名区域“Test”,您可以使用以下示例:
Application.Goto _   Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")				
或者,您也可以激活工作表,然后使用上面的方法 7 来选择命名区域:
Workbooks("BOOK2.XLS").Sheets("Sheet2").ActivateRange("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").ActivateActiveSheet.Range("Test").Offset(4, 3).Select				

13:如何选择指定的区域并调整所选区域的大小

若要选择命名区域“Database”,然后扩展五行的选择内容,您可以使用以下示例:
Range("Database").SelectSelection.Resize(Selection.Rows.Count + 5, _   Selection.Columns.Count).Select				

14:如何选择指定的区域、使之偏移然后调整其大小

若要选择命名区域“Database”下方四行、右侧三列的区域并包括超过命名区域两行和一列的区域,您可以使用以下示例:
Range("Database").SelectSelection.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

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).ColumnlastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).RowActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select				
    - 或 -				
lastCol = ActiveSheet.Range("a1").End(xlToRight).ColumnlastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).RowActiveSheet.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”。
参考

有关如何使用本文中的示例代码的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290140 如何运行知识库文章中 Office XP 程序的示例代码
OfficeKBHowTo howto contiguous how to discontiguous non-contiguous nonadjacent non-adjacent  XL2003 XL2007 XL2010
注意:本篇“快速发布”文章是从 Microsoft 支持组织直接创建的。 文中包含的信息按原样提供,用于响应紧急问题。 由于发布仓促,材料可能包含印刷错误,并且可能随时修订,恕不另行通知。 有关其他注意事项,请参阅使用条款
属性

文章 ID:291308 - 上次审阅时间:01/31/2014 22:24:00 - 修订版本: 1.0

Microsoft Office Excel 2003, Microsoft Office Excel 2007, Microsoft Excel 2010

  • kbautomation kbmacro kbdtacode kbhowto kbprogramming KB291308
反馈