Выбор ячеек и диапазонов ячеек в Excel с помощью процедур Visual Basic

Поддержка Office 2003 завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Office 2003. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

Дополнительная информация
Корпорация Майкрософт приводит примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут пояснить назначение определенной процедуры, но модификация примеров для обеспечения дополнительных возможностей или разработка процедур для конкретных задач заказчика не предусмотрена. В приведенных в этой статье примерах используются методы Visual Basic, перечисленные в таблице ниже.
   Метод              Аргументы   ------------------------------------------   Activate           нет   Cells              rowIndex, columnIndex   Application.Goto   reference, scroll   Offset             rowOffset, columnOffset   Range              cell1                      cell1, cell2   Resize             rowSize, columnSize   Select             нет   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 класса приложения

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: 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 нужно вызвать два метода Cells в методе Range, когда указанный диапазон относится к другому (неактивному) рабочему листу, необходимо каждый раз использовать объект 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».
Ссылки

Дополнительные сведения об использовании образцов кода, приведенных в данной статье, см. в следующей статье базы знаний Майкрософт:
290140 Выполнение примеров кода для программ Office XP, встречающихся в статьях базы знаний (данная ссылка может указывать на содержимое полностью или частично на английском языке)
OfficeKBHowTo howto contiguous how to discontiguous non-contiguous nonadjacent non-adjacent  XL2003 XL2007 XL2010
Свойства

Номер статьи: 291308 — последний просмотр: 03/09/2014 01:18:00 — редакция: 3.0

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

  • kbautomation kbmacro kbdtacode kbhowto kbprogramming KB291308
Отзывы и предложения