Объект Range (Excel)
Представляет ячейку, строку, столбец или группу ячеек, содержащую один или несколько смежных блоков ячеек или объемный диапазон.
Примечание.
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Примечания
Элемент по умолчанию объекта Range направляет вызовы без параметров в свойство Value, а вызовы с параметрами — в элемент Item. Таким образом, someRange = someOtherRange
соответствует someRange.Value = someOtherRange.Value
, someRange(1)
соответствует someRange.Item(1)
и someRange(1,1)
соответствует someRange.Item(1,1)
.
В разделе Пример описаны следующие свойства и методы для возврата объекта Range:
- Свойства Range и Cells объекта Worksheet
- Свойства Range и Cells объекта Range
- Свойства Rows и Columns объекта Worksheet
- Свойства Rows и Columns объекта Range
- Свойство Offset объекта Range
- Метод Union объекта Application
Пример
Чтобы вернуть объект Range, представляющий одну ячейку или диапазон ячеек, используйте синтаксис Range ( arg ), где arg обозначает диапазон. В следующем примере значение ячейки A1 помещается в ячейку A5.
Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value
В следующем примере диапазон A1:H8 заполняется случайными числами путем задания формулы для каждой ячейки в диапазоне. При использовании без квалификатора объекта (объекта слева от точки) свойство Range возвращает диапазон на активном листе. Если активное окно не является листом, метод завершается с ошибкой.
Используйте метод Activate объекта Worksheet, чтобы активировать лист перед использованием свойства Range без явного квалификатора объекта.
Worksheets("Sheet1").Activate
Range("A1:H8").Formula = "=Rand()" 'Range is on the active sheet
В следующем примере очищается содержимое диапазона Criteria.
Примечание.
Если используется текстовый аргумент для адреса диапазона, необходимо указать адрес в нотации стиля A1 (нельзя использовать нотацию в стиле R1C1).
Worksheets(1).Range("Criteria").ClearContents
Чтобы получить диапазон, содержащий все отдельные ячейки листа, используйте свойство Cells на листе. Вы можете обращаться к отдельным ячейкам, используя синтаксис Item(строка, столбец), где строка — индекс строки, а столбец — индекс столбца. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range. В следующем примере на первом листе активной книги ячейке A1 присваивается значение 24, а в ячейке B1 — значение 42.
Worksheets(1).Cells(1, 1).Value = 24
Worksheets(1).Cells.Item(1, 2).Value = 42
В следующем примере задается формула для ячейки A2.
ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
Хотя также можно использовать Range("A1")
, чтобы вернуть значение ячейки A1, иногда свойство Cells может быть удобнее, так как позволяет использовать переменную для строки или столбца. В следующем примере создаются заголовки столбцов и строк на листе Sheet1. Обратите внимание, что после активации листа можно использовать свойство Cells без явного объявления листа (оно возвращает ячейку на активном листе).
Примечание.
Хотя для изменения ссылок в стиле A1 можно использовать строковые функции Visual Basic, проще (и лучше при программировании) использовать нотацию Cells(1, 1)
.
Sub SetUpTable()
Worksheets("Sheet1").Activate
For TheYear = 1 To 5
Cells(1, TheYear + 1).Value = 1990 + TheYear
Next TheYear
For TheQuarter = 1 To 4
Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter
Next TheQuarter
End Sub
Используйте синтаксис_выражение_.Cells, где выражение возвращает объект Range, чтобы получить диапазон с тем же адресом, состоящий из отдельных ячеек. В таком диапазоне отдельные ячейки доступны с помощью синтаксиса Item(строка, столбец) относительно левого верхнего угла первой области диапазона. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range. В следующем примере на первом листе активной книги в ячейках C5 и D5 указывается формула.
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
Worksheets(1).Range("C5:C10").Cells.Item(1, 2).Formula = "=Rand()"
Чтобы вернуть объект Range, используйте синтаксис Range ( ячейка1, ячейка2 ), где ячейка1 и ячейка2 — это объекты Range, указывающие начальную и конечную ячейки. В следующем примере устанавливается тип линии границы для ячеек A1:J10.
Примечание.
Имейте в виду, что точка перед каждым появлением свойства Cells является обязательной, если результат предыдущего оператора With нужно применять к свойству Cells. В данном случае указано, что ячейки расположены на листе один (без точки свойство Cells будет возвращать ячейки активного листа).
With Worksheets(1)
.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
Чтобы получить диапазон, содержащий все строки листа, используйте свойство Rows на листе. Вы можете обращаться к отдельным строкам с помощью синтаксиса Item(строка), где строка — это индекс строки. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Примечание.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из строк. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются строки 5 и 10 первого листа активной книги.
Worksheets(1).Rows(10).Delete
Worksheets(1).Rows.Item(5).Delete
Чтобы получить диапазон, содержащий все столбцы листа, используйте свойство Columns на листе. Вы можете обращаться к отдельным столбцам с помощью синтаксиса Item(строка) [sic], где строка — это индекс столбца в виде числа или адреса столбца в формате А1. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Примечание.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из столбцов. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются столбцы B, C, E и J первого листа активной книги.
Worksheets(1).Columns(10).Delete
Worksheets(1).Columns.Item(5).Delete
Worksheets(1).Columns("C").Delete
Worksheets(1).Columns.Item("B").Delete
Используйте синтаксис_выражение_.Rows, где выражение возвращает объект Range, чтобы получить диапазон, состоящий из строк первой области диапазона. Вы можете обращаться к отдельным строкам с помощью синтаксиса Item(строка), где строка — это относительный индекс строки от верхнего края первой области диапазона. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Примечание.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из строк. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются диапазоны C8:D8 и C6:D6 первого листа активной книги.
Worksheets(1).Range("C5:D10").Rows(4).Delete
Worksheets(1).Range("C5:D10").Rows.Item(2).Delete
Используйте синтаксис_выражение_.Columns, где выражение возвращает объект Range, чтобы получить диапазон, состоящий из столбцов первой области диапазона. Вы можете обращаться к отдельным столбцам с помощью синтаксиса Item(строка) [sic], где строка — это относительный индекс столбца от левого края первой области диапазона, указанный в виде числа или адреса столбца в формате A1. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Примечание.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из столбцов. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются диапазоны L2:L10, G2:G10, F2:F10 и D2:D10 первого листа активной книги.
Worksheets(1).Range("C5:Z10").Columns(10).Delete
Worksheets(1).Range("C5:Z10").Columns.Item(5).Delete
Worksheets(1).Range("C5:Z10").Columns("D").Delete
Worksheets(1).Range("C5:Z10").Columns.Item("B").Delete
Чтобы вернуть диапазон с указанным смещением относительно другого диапазона, используйте синтаксис Offset ( строка, столбец ), где строка и столбец — это смещения строк и столбцов. В следующем примере выделяются ячейки, расположенные на три строки вниз и на один столбец вправо от ячейки в левом верхнем углу текущего выделенного фрагмента. Нельзя выбрать ячейку, которая находится не на активном листе, поэтому сначала необходимо активировать лист.
Worksheets("Sheet1").Activate
'Can't select unless the sheet is active
Selection.Offset(3, 1).Range("A1").Select
Используйте синтаксис Union ( диапазон1, диапазон2, ...) для возврата диапазонов из нескольких областей, то есть диапазонов, состоящих из двух или более смежных блоков ячеек. В следующем примере создается объект, определенный как объединение диапазонов A1:B2 и C3:D4, а затем выбирается определенный диапазон.
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select
При работе с выделенными фрагментами, содержащими несколько областей, удобно применять свойство Areas. Оно разделяет выделенный фрагмент с несколькими областями на отдельные объекты Range, а затем возвращает объекты в виде коллекции. Используйте свойство Count в возвращенной коллекции, чтобы убедиться, что выделение содержит более одной области, как показано в следующем примере.
Sub NoMultiAreaSelection()
NumberOfSelectedAreas = Selection.Areas.Count
If NumberOfSelectedAreas > 1 Then
MsgBox "You cannot carry out this command " & _
"on multi-area selections"
End If
End Sub
В этом примере используется метод AdvancedFilter объекта Range для создания списка уникальных значений, а также количества появлений этих уникальных значений в диапазоне столбца A.
Sub Create_Unique_List_Count()
'Excel workbook, the source and target worksheets, and the source and target ranges.
Dim wbBook As Workbook
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim rnSource As Range
Dim rnTarget As Range
Dim rnUnique As Range
'Variant to hold the unique data
Dim vaUnique As Variant
'Number of unique values in the data
Dim lnCount As Long
'Initialize the Excel objects
Set wbBook = ThisWorkbook
With wbBook
Set wsSource = .Worksheets("Sheet1")
Set wsTarget = .Worksheets("Sheet2")
End With
'On the source worksheet, set the range to the data stored in column A
With wsSource
Set rnSource = .Range(.Range("A1"), .Range("A100").End(xlDown))
End With
'On the target worksheet, set the range as column A.
Set rnTarget = wsTarget.Range("A1")
'Use AdvancedFilter to copy the data from the source to the target,
'while filtering for duplicate values.
rnSource.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=rnTarget, _
Unique:=True
'On the target worksheet, set the unique range on Column A, excluding the first cell
'(which will contain the "List" header for the column).
With wsTarget
Set rnUnique = .Range(.Range("A2"), .Range("A100").End(xlUp))
End With
'Assign all the values of the Unique range into the Unique variant.
vaUnique = rnUnique.Value
'Count the number of occurrences of every unique value in the source data,
'and list it next to its relevant value.
For lnCount = 1 To UBound(vaUnique)
rnUnique(lnCount, 1).Offset(0, 1).Value = _
Application.Evaluate("COUNTIF(" & _
rnSource.Address(External:=True) & _
",""" & rnUnique(lnCount, 1).Text & """)")
Next lnCount
'Label the column of occurrences with "Occurrences"
With rnTarget.Offset(0, 1)
.Value = "Occurrences"
.Font.Bold = True
End With
End Sub
Методы
- Activate
- AddComment
- AddCommentThreaded
- AdvancedFilter
- AllocateChanges
- ApplyNames
- ApplyOutlineStyles
- AutoComplete
- AutoFill
- AutoFilter
- AutoFit
- AutoOutline
- BorderAround
- Calculate
- CalculateRowMajorOrder
- CheckSpelling
- Clear
- ClearComments
- ClearContents
- ClearFormats
- ClearHyperlinks
- ClearNotes
- ClearOutline
- ColumnDifferences
- Consolidate
- ConvertToLinkedDataType
- Copy
- CopyFromRecordset
- CopyPicture
- CreateNames
- Cut
- DataTypeToText
- DataSeries
- Delete
- DialogBox
- Dirty
- DiscardChanges
- EditionOptions
- ExportAsFixedFormat
- FillDown
- FillLeft
- FillRight
- FillUp
- Find
- FindNext
- FindPrevious
- FlashFill
- FunctionWizard
- Group
- Insert
- InsertIndent
- Justify
- ListNames
- Merge
- NavigateArrow
- NoteText
- Parse
- PasteSpecial
- PrintOut
- PrintPreview
- RemoveDuplicates
- RemoveSubtotal
- Replace
- RowDifferences
- Run
- Select
- SetCellDataTypeFromCell
- SetPhonetic
- Show
- ShowCard
- ShowDependents
- ShowErrors
- ShowPrecedents
- Sort
- SortSpecial
- Speak
- SpecialCells
- SubscribeTo
- Subtotal
- Table
- TextToColumns
- Ungroup
- UnMerge
Свойства
- AddIndent
- Address
- AddressLocal
- AllowEdit
- Application
- Areas
- Borders
- Cells
- Characters
- Column
- Columns
- ColumnWidth
- Comment
- CommentThreaded
- Count
- CountLarge
- Creator
- CurrentArray
- CurrentRegion
- Dependents
- DirectDependents
- DirectPrecedents
- DisplayFormat
- End
- EntireColumn
- EntireRow
- Errors
- Font
- FormatConditions
- Formula
- FormulaArray
- FormulaHidden
- FormulaLocal
- FormulaR1C1
- FormulaR1C1Local
- HasArray
- HasFormula
- HasRichDataType
- Height
- Hidden
- HorizontalAlignment
- Hyperlinks
- ID
- IndentLevel
- Interior
- Item
- Left
- LinkedDataTypeState
- ListHeaderRows
- ListObject
- LocationInTable
- Locked
- MDX
- MergeArea
- MergeCells
- Name
- Next
- NumberFormat
- NumberFormatLocal
- Offset
- Orientation
- OutlineLevel
- PageBreak
- Parent
- Phonetic
- Phonetics
- PivotCell
- PivotField
- PivotItem
- PivotTable
- Precedents
- PrefixCharacter
- Previous
- QueryTable
- Range
- ReadingOrder
- Resize
- Row
- RowHeight
- Rows
- ServerActions
- ShowDetail
- ShrinkToFit
- SoundNote
- SparklineGroups
- Style
- Summary
- Text
- Top
- UseStandardHeight
- UseStandardWidth
- Validation
- Value
- Value2
- VerticalAlignment
- Width
- Worksheet
- WrapText
- XPath
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.