在 Excel 中如何使用 Visual Basic 过程选择单元格/区域

文章编号: 291308 - 查看本文应用于的产品
展开全部 | 关闭全部

本页

概要

当您创建 Microsoft Visual Basic for Applications 宏或过程时,可以从多种方法中选择用于选择单元格、区域和命名区域的方法。本文包含一些示例代码,用以演示其中的某些方法。

本文包括以下示例:
  1. 如何在活动工作表上选择单元格。
  2. 如何在同一工作簿中的另一工作表上选择单元格。
  3. 如何在另外一个工作簿中的工作表上选择单元格。
  4. 如何在活动工作表上选择单元格区域。
  5. 如何在同一工作簿中另一工作表上选择单元格区域。
  6. 如何在另一工作簿中的工作表上选择单元格区域。
  7. 如何在活动工作表上选择命名区域。
  8. 如何在同一工作簿中的另一工作表上选择命名区域。
  9. 如何在另一工作簿中的工作表上选择命名区域。
  10. 如何相对于活动单元格选择单元格。
  11. 如何相对于另一(非活动)单元格选择单元格。
  12. 如何相对于指定区域选择单元格区域偏移。
  13. 如何选择指定的区域并调整所选区域的大小。
  14. 如何选择指定的区域、使之偏移然后调整其大小。
  15. 如何选择两个或更多指定区域的联合。
  16. 如何选择两个或更多指定区域的交集。
  17. 如何选择一列连续数据的最后一个单元格。
  18. 如何选择一列连续数据底部的空白单元格。
  19. 如何在一列中选择整个相邻单元格区域。
  20. 如何在一列中选择整个非相邻单元格区域。
  21. 如何选择矩形单元格区域。
  22. 如何选择长度不一的多个非相邻列。
注意,这些示例并不一定是执行所述操作的最佳或唯一做法。因为 Visual Basic 具有灵活性,所以执行同一操作时往往有多种不同的方法。

更多信息

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").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. 如何相对于活动单元格选择单元格

要选择活动单元格下面与其相距 5 行、左侧与其相距 4 列的一个单元格,可以使用以下示例:
ActiveCell.Offset(5, -4).Select
				
要选择活动单元格上面与其相距 2 行、右侧与其相距 3 列的一个单元格,可以使用以下示例:
ActiveCell.Offset(-2, 3).Select
				
注意:如果您尝试选择“工作表之外”的一个单元格,将会出现错误。在上面的第一个示例中,如果活动单元格在 A 列到 D 列之间,则会返回一个错误,因为向左移动 4 列将把活动单元格移动到一个无效的单元格地址。

11. 如何相对于另一(非活动)单元格选择单元格

要选择单元格 C7 下面与其相距 5 行、右侧与其相距 4 列的一个单元格,可以使用以下任一示例:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
				
ActiveSheet.Range("C7").Offset(5, 4).Select
				

12. 如何相对于指定区域选择单元格区域偏移

要选择一个与命名区域“Test”大小相同但下移 4 行、右移 3 列的单元格区域,可以使用以下示例:
ActiveSheet.Range("Test").Offset(4, 3).Select
				
如果命名区域在另一个(非活动)工作表上,请首先激活该工作表,接着使用以下示例选择该区域:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select
				

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

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

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

要选择一个比命名区域“Database”偏下 4 行、偏右 3 列的区域并使之比命名区域多 2 行、1 列,可以使用以下示例:
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

16. 如何选择两个或更多指定区域的交集

要选择两个命名区域“Test”和“Sample”的交集,可以使用以下示例:
Application.Intersect(Range("Test"), Range("Sample")).Select
				
注意,这两个区域必须位于同一个工作表中,此示例才能运行。



本文中的示例 17 至 21 引用了下面这一示例数据集。这些示例分别说明了将选择示例数据中的哪一单元格区域。
A1: 名称          B1: 销售额     C1: 数量
A2: a		B2: $10       C2: 5
A3: b		B3:           C3: 10
A4: c		B4: $10       C4: 5
A5:             B5:           C5:
A6: 合计          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”。

参考

如想了解在 Visual Basic 宏中如何选择单元格的更多信息,请在 Visual Basic 编辑器中单击“帮助”菜单上的“Microsoft Visual Basic 帮助”,在“Office 助手”或“应答向导”中键入选择和激活单元格,然后单击“搜索”以查看其主题。
有关如何使用本文中示例代码的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290140 如何运行知识库文章中为 Office XP 程序提供的代码示例

属性

文章编号: 291308 - 最后修改: 2006年10月12日 - 修订: 5.4
这篇文章中的信息适用于:
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 标准版
  • Microsoft Excel 2000 标准版
  • Microsoft Excel 97 标准版
关键字:?
kbhowto kbmacro kbprogramming kbautomation kbdtacode KB291308
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈