Свойство CurrentRegion объекта Range, возвращающее в VBA Excel текущий прямоугольный диапазон ячеек, ограниченный пустыми строками и пустыми столбцами.
Определение
CurrentRegion — это свойство ячейки (объекта Range), которое в VBA Excel возвращает прямоугольный диапазон смежных ячеек (текущий диапазон), ограниченный любым сочетанием пустых строк и пустых столбцов.
Другими словами: границы возвращенного свойством Range.CurrentRegion диапазона определяются указанной ячейкой и смежными с ней и между собой непустыми ячейками. Смежными считаются, в том числе, и непустые ячейки по диагонали. Так как возвращается прямоугольный диапазон, он может включать в себя пустые ячейки, которые дополняют произвольный диапазон непустых ячеек до прямоугольного.
Синтаксис
Expression — выражение (переменная), возвращающее объект Range, состоящий из одной ячейки. Если Expression возвращает диапазон, состоящий из двух и более ячеек, то для определения текущего диапазона используется первая ячейка возвращенного диапазона.
Примеры кода с CurrentRegion
Примеры кода VBA Excel со свойством Range.CurrentRegion будем демонстрировать на следующем диапазоне с заполненными и незаполненными ячейками:
Пример 1
Зависимость возвращенного диапазона (CurrentRegion) от указанной ячейки (диапазона):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Test1() ‘Классический вариант MsgBox Range(«A1»).CurrentRegion.Address ‘Результат: $A$1:$F$6 MsgBox [D10].CurrentRegion.Address ‘Результат: $D$10:$F$13 ‘Одна пустая ячейка, ограниченная пустыми строками и столбцами MsgBox Range(«B8»).CurrentRegion.Address ‘Результат: $B$8 ‘Диапазон пустых ячеек, ограниченный пустыми строками и столбцами MsgBox Range(«A8:B13»).CurrentRegion.Address ‘Результат: $A$8 ‘Еще одно доказательство, что только первая ячейка указанного диапазона ‘задает границы диапазона, возвращаемого свойством CurrentRegion MsgBox Range(«F1:F13»).CurrentRegion.Address ‘Результат: $F$1 ‘Заполненная ячейка является смежной по горизонтали к заданной пустой MsgBox Range(«C5»).CurrentRegion.Address ‘Результат: $A$1:$F$6 ‘Заполненная ячейка является смежной по диагонали к заданной пустой MsgBox [C7].CurrentRegion.Address ‘Результат: $A$1:$F$7 End Sub |
Обратите внимание, что результат выполнения последней строки кода до End Sub
— $A$1:$F$7
— содержит внизу пустую строку A7:F7
. Это строка, в которую входит изначально указанная ячейка C7
.
Пример 2
Присвоение ссылки на диапазон, возвращенный свойством Range.CurrentRegion, объектной переменной и извлечение некоторых свойств возвращенного диапазона:
Sub Test2() Dim myCR As Range Set myCR = Range(«D10»).CurrentRegion With myCR ‘Количество строк в диапазоне MsgBox .Rows.Count ‘Результат: 4 ‘Количество столбцов в диапазоне MsgBox .Columns.Count ‘Результат: 3 ‘Количество ячеек в диапазоне MsgBox .Cells.Count ‘Результат: 12 ‘Номер строки рабочего листа, на которой ‘находится последняя строка диапазона MsgBox .Cells(.Cells.Count).Row ‘Результат: 13 End With End Sub |
Содержание
- VBA Current Region
- CurrentRegion Syntax
- Obtain the Current Region
- Counting the Rows and Columns in the Current Region
- Clearing the Current Region
- Assigning the Current Region to a Variable
- Get the Start and End Cells in the Current Region
- VBA Coding Made Easy
- VBA Code Examples Add-in
- Vba excel что такое currentregion
- Excel VBA Ranges and Cells
- Ranges and Cells in VBA
- Cell Address
- A1 Notation
- R1C1 Notation
- Range of Cells
- A1 Notation
- R1C1 Notation
- Writing to Cells
- Reading from Cells
- Non Contiguous Cells
- VBA Coding Made Easy
- Intersection of Cells
- Offset from a Cell or Range
- Offset Syntax
- Offset from a cell
- Offset from a Range
- Setting Reference to a Range
- Resize a Range
- Resize Syntax
- OFFSET vs Resize
- All Cells in Sheet
- UsedRange
- CurrentRegion
- Range Properties
- Last Cell in Sheet
- Last Used Row Number in a Column
- Last Used Column Number in a Row
- Cell Properties
- Common Properties
- Cell Font
- Copy and Paste
- Paste All
- Paste Special
- AutoFit Contents
- More Range Examples
- For Each
- Range Address
- Range to Array
- Array to Range
- Sum Range
- Count Range
- VBA Code Examples Add-in
VBA Current Region
In this Article
This tutorial will explain the how to use Current Region in VBA.
The CurrentRegion property in VBA is a way to select all the cells that are contained within a Range that you might want to work with. As long as the cells within the range are all consecutive or ‘touching’ each other, the CurrentRegion will select every cell in the region.
CurrentRegion Syntax
The syntax is very simply:
where you would specify the cell whose current region you wished to select and then use the CurrentRegion.Select property to select the Range of Cells.
Obtain the Current Region
Consider the following worksheet.
The following Sub Procedure would select all the cells within the Excel table.
If we run the routine, all the cells in the CurrentRegion of cell E11 will be selected.
If we remove the contents of the adjoining cells, and re-run the routine, the following will be selected as the current region.
However if we remove even more data, we could end up with the example below for the Current Region of Cell E11.
Putting information ack into D13, we end up with the following:
The CurrentRegion therefore returns another range object defined by the smallest combination of occupied columns and rows that surround the Range you have supplied.
Counting the Rows and Columns in the Current Region
We can use CurrentRegion to count the rows and columns.
If we run the procedure, the following message box will appear.
Clearing the Current Region
We can also use the current region property to clear the range of cells.
Assigning the Current Region to a Variable
We can also assign the entire Current Region to a range variable, and then use that range variable to manipulate the cells – be it formatting the cells, sorting the cells etc..
If we run the procedure above, we will end up with a worksheet as shown below!
Get the Start and End Cells in the Current Region
With slightly more complicated code, we can get the first cell and last cell in a Current Region.
When we run the code above, the following message box will appear
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Vba excel что такое currentregion
ьФЙ ДЧБ УЧПКУФЧБ ПЮЕОШ РПМЕЪОЩ, ЛПЗДБ РТПЗТБННБ ТБВПФБЕФ У ДЙБРБЪПОБНЙ, ТБЪНЕТБНЙ ЛПФПТЩИ чЩ ОЕ НПЦЕФЕ ХРТБЧМСФШ. фЕЛХЭЙК ТЕЗЙПО (current region) -ЬФП ДЙБРБЪПО СЮЕЕЛ, ПЗТБОЙЮЕООЩК РХУФЩНЙ УФТПЛБНЙ Й ЛПМПОЛБНЙ ЙМЙ УПЮЕФБОЙЕН РХУФЩИ УФТПЛ, РХУФЩИ ЛПМПОПЛ Й ЗТБОЙГ ТБВПЮЕЗП МЙУФБ.
CurrentRegion ? УЧПКУФЧП ПВЯЕЛФБ Range. оБ МЙУФЕ НПЦЕФ ВЩФШ ОЕУЛПМШЛП ФЕЛХЭЙИ ТЕЗЙПОПЧ ? ЧУЕ ЪБЧЙУЙФ ПФ ФПЗП, Л ЛБЛПНХ ПВЯЕЛФХ Range чЩ ПВТБЭБЕФЕУШ.
дПРХУФЙН, МЙУФ Sheet1 УПДЕТЦЙФ УРЙУПЛ, ДМС ЛПФПТПЗП чЩ ИПФЙФЕ ХУФБОПЧЙФШ ЖПТНБФ ЮЙУЕМ. еДЙОУФЧЕООПЕ, ЮФП ЙЪЧЕУФОП ПВ ЬФПН УРЙУЛЕ, ? ПО ОБЮЙОБЕФУС У СЮЕКЛЙ б1; ЮЙУМП УФТПЛ Й ЛПМПОПЛ Ч ОЕН чЩ ОЕ ЪОБЕФЕ. ч УМЕДХАЭЕН РТЙНЕТЕ РПЛБЪБОП, ЛБЛ ПФЖПТНБФЙТПЧБФШ ФБЛПК УРЙУПЛ ЮЕТЕЪ УЧПКУФЧП CurrentRegion:
Sub FormatRange()
Set myRange = Worksheets(«Sheet1»).Range(«A1»).CurrentRegion
myRange.NumberFormat = «0.0»
End Sub
йУРПМШЪПЧБООЩК ДЙБРБЪПО (used range) ПЗТБОЙЮЕО МЕЧПК ЧЕТИОЕК Й РТБЧПК ОЙЦОЕК ЪБРПМОЕООЩНЙ СЮЕКЛБНЙ, ОБЙВПМЕЕ ХДБМЕООЩНЙ ДТХЗ ПФ ДТХЗБ. ч ЬФПН ДЙБРБЪПОЕ УПДЕТЦБФУС ЧУЕ ЪБРПМОЕООЩЕ СЮЕКЛЙ МЙУФБ, Б ФБЛЦЕ ТБУРПМПЦЕООЩЕ НЕЦДХ ОЙНЙ РХУФЩЕ СЮЕКЛЙ. оБ МЙУФЕ НПЦЕФ ВЩФШ ФПМШЛП ПДЙО ФБЛПК ДЙБРБЪПО, Й UsedRange СЧМСЕФУС УЧПКУФЧПН ПВЯЕЛФБ Worksheet, Б ОЕ Range.
рХУФШ БЛФЙЧОЩК МЙУФ УПДЕТЦЙФ ТЕЪХМШФБФЩ ЛБЛЙИ-ФП ЙЪНЕТЕОЙК ЪБ ПРТЕДЕМЕООЩК РЕТЙПД ЧТЕНЕОЙ. ч РЕТЧПК ЛПМПОЛЕ ЙУРПМШЪПЧБООПЗП ДЙБРБЪПОБ ЪБРЙУБОЩ ДБФЩ, ЧП ЧФПТПК ? ЧТЕНС, Б Ч ФТЕФШЕК Й ЮЕФЧЕТФПК ? ТЕЪХМШФБФЩ ЙЪНЕТЕОЙК. чЩ ИПФЙФЕ ОБРЙУБФШ ЛПД, ЛПФПТЩК ПВЯЕДЙОСЕФ РБТЩ ?ДБФБ-ЧТЕНС? Ч ПДОП ЪОБЮЕОЙЕ, РТЕПВТБЪХЕФ ЧТЕНС ЙЪ GMT (Greenwich Mean Time ? ЧТЕНС РП зТЙОЧЙЮХ) Ч PST (Pacific Standard Time ? УФБОДБТФОПЕ ЧТЕНС фЙИППЛЕБОУЛПЗП РПВЕТЕЦШС уыб) Й РТЙНЕОСЕФ Л РПМХЮЕООПНХ ЪОБЮЕОЙА ЖПТНБФ ДБФЩ. ч ФБВМЙГЕ НПЗХФ ВЩФШ РХУФЩЕ УФТПЛЙ Й ЛПМПОЛЙ. юФПВЩ РПМХЮЙФШ ЧЕУШ ЙУРПМШЪПЧБООЩК ДЙБРБЪПО, ЧЛМАЮБС РХУФЩЕ УФТПЛЙ, НПЦОП ЪБДЕКУФЧПЧБФШ УЧПКУФЧП UsedRange. чПФ ПДЙО ЙЪ ЧБТЙБОФПЧ РТЕПВТБЪПЧБОЙС Й ЖПТНБФЙТПЧБОЙС ДБФ Й ЧТЕНЕОЙ:
Sub ConvertDates()
Set myRange = ActiveSheet.UsedRange
myRange.Columns («C») .Insert
Set dateCol = myRange.Columns(«C»)
For Each У In dateCol.Cells
If c.0ffset(0, -1).Value <> «» Then
c.FormulaR1C1 = «=RC[-2]+RC[-1]-(8/24)»
End If
Next У
dateCol.NumberFormat = «mrnm-dd-yyyy hh:mm»
dateCol.Copy
dateCol.PasteSpecial Paste.: =xlValues
my Range.Columns( «A:B» ).Dele te
dateCol.AutoFit
End Sub
ъБНЕФШФЕ: ЮФПВЩ РПМХЮЙФШ ФТЕФША ЛПМПОЛХ Ч ЙУРПМШЪПЧБООПН ДЙБРБЪПОЕ, РТЙНЕОСЕФУС ЧЩТБЦЕОЙЕ ActiveSheet. UsedRange. Columns( «у»), ОП ОБ УБНПН МЙУФЕ ЬФБ ЛПМПОЛБ НПЦЕФ ВЩФШ МАВПК РП УЮЕФХ ? ЙУРПМШЪПЧБООПНХ ДЙБРБЪПОХ НПЗХФ РТЕДЫЕУФЧПЧБФШ РХУФЩЕ ЛПМПОЛЙ.
дТХЗЙЕ УЧПКУФЧБ Й НЕФПДЩ ПВЯЕЛФБ Range РПЪЧПМСАФ УФТПЙФШ ЧЕУШНБ УМПЦОЩЕ ЧЩТБЦЕОЙС, ЧПЪЧТБЭБАЭЙЕ РПДДЙБРБЪПОЩ (subranges) ЙМЙ ОБДДЙБРБЪПОЩ (super-ranges) ЬФПЗП ПВЯЕЛФБ. уТЕДЙ УЧПКУФЧ Й НЕФПДПЧ, ПВЩЮОП РТЙНЕОСЕНЩИ У ЬФПК ГЕМША, НПЦОП ПФНЕФЙФШ Areas, Cells, Columns, EntireColumn, EntireRow, Range Й Rows.
фЕЛУФ РПУПВЙС РПДЗПФПЧМЕО ОБ ПУОПЧЕ НБФЕТЙБМПЧ ЛОЙЗЙ
Microsoft Corporation. тХЛПЧПДУФЧП РТПЗТБННЙУФБ РП Visual Basic ДМС Microsoft Office 97 / рЕТ. У БОЗМ. — н.: йЪДБФЕМШУЛЙК ПФДЕМ «тХУУЛБС тЕДБЛГЙС» фпп » Channel Trading Ltd. «, 1997. — 544 У.: ЙММ.
c пТЙЗЙОБМШОПЕ ЙЪДБОЙЕ ОБ БОЗМЙКУЛПН СЪЩЛЕ, Microsoft Corporation , 1997
c тХУУЛЙК РЕТЕЧПД, Microsoft Corporation, 1997
Источник
Excel VBA Ranges and Cells
In this Article
Ranges and Cells in VBA
Excel spreadsheets store data in Cells. Cells are arranged into Rows and Columns. Each cell can be identified by the intersection point of it’s row and column (Exs. B3 or R3C2).
An Excel Range refers to one or more cells (ex. A3:B4)
Cell Address
A1 Notation
In A1 notation, a cell is referred to by it’s column letter (from A to XFD) followed by it’s row number(from 1 to 1,048,576). This is called a cell address.
In VBA you can refer to any cell using the Range Object.
R1C1 Notation
In R1C1 Notation a cell is referred by R followed by Row Number then letter ‘C’ followed by the Column Number. eg B4 in R1C1 notation will be referred by R4C2. In VBA you use the Cells Object to use R1C1 notation:
Range of Cells
A1 Notation
To refer to a more than one cell use a “:” between the starting cell address and last cell address. The following will refer to all the cells from A1 to D10:
R1C1 Notation
To refer to a more than one cell use a “,” between the starting cell address and last cell address. The following will refer to all the cells from A1 to D10:
Writing to Cells
To write values to a cell or contiguous group of cells, simple refer to the range, put an = sign and then write the value to be stored:
Reading from Cells
To read values from cells, simple refer to the variable to store the values, put an = sign and then refer to the range to be read:
Note: To store values from a range of cells, you need to use an Array instead of a simple variable.
Non Contiguous Cells
To refer to non contiguous cells use a comma between the cell addresses:
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Intersection of Cells
To refer to non contiguous cells use a space between the cell addresses:
Offset from a Cell or Range
Using the Offset function, you can move the reference from a given Range (cell or group of cells) by the specified number_of_rows, and number_of_columns.
Offset Syntax
Offset from a cell
Offset from a Range
Setting Reference to a Range
To assign a range to a range variable: declare a variable of type Range then use the Set command to set it to a range. Please note that you must use the SET command as RANGE is an object:
Resize a Range
Resize method of Range object changes the dimension of the reference range:
Top-left cell of the Resized range is same as the top-left cell of the original range
Resize Syntax
OFFSET vs Resize
Offset does not change the dimensions of the range but moves it by the specified number of rows and columns. Resize does not change the position of the original range but changes the dimensions to the specified number of rows and columns.
All Cells in Sheet
The Cells object refers to all the cells in the sheet (1048576 rows and 16384 columns).
UsedRange
UsedRange property gives you the rectangular range from the top-left cell used cell to the right-bottom used cell of the active sheet.
CurrentRegion
CurrentRegion property gives you the contiguous rectangular range from the top-left cell to the right-bottom used cell containing the referenced cell/range.
Range Properties
You can get Address, row/column number of a cell, and number of rows/columns in a range as given below:
Last Cell in Sheet
You can use Rows.Count and Columns.Count properties with Cells object to get the last cell on the sheet:
Last Used Row Number in a Column
END property takes you the last cell in the range, and End(xlUp) takes you up to the first used cell from that cell.
Last Used Column Number in a Row
END property takes you the last cell in the range, and End(xlToLeft) takes you left to the first used cell from that cell.
You can also use xlDown and xlToRight properties to navigate to the first bottom or right used cells of the current cell.
Cell Properties
Common Properties
Here is code to display commonly used Cell Properties
Cell Font
Cell.Font object contains properties of the Cell Font:
Copy and Paste
Paste All
Ranges/Cells can be copied and pasted from one location to another. The following code copies all the properties of source range to destination range (equivalent to CTRL-C and CTRL-V)
Paste Special
Selected properties of the source range can be copied to the destination by using PASTESPECIAL option:
Here are the possible options for the Paste option:
AutoFit Contents
Size of rows and columns can be changed to fit the contents using AutoFit:
More Range Examples
It is recommended that you use Macro Recorder while performing the required action through the GUI. It will help you understand the various options available and how to use them.
For Each
It is easy to loop through a range using For Each construct as show below:
At each iteration of the loop one cell in the range is assigned to the variable cell and statements in the For loop are executed for that cell. Loop exits when all the cells are processed.
Sort is a method of Range object. You can sort a range by specifying options for sorting to Range.Sort. The code below will sort the columns A:C based on key in cell C2. Sort Order can be xlAscending or xlDescending. Header:= xlYes should be used if first row is the header row.
Find is also a method of Range Object. It find the first cell having content matching the search criteria and returns the cell as a Range object. It return Nothing if there is no match.
Use FindNext method (or FindPrevious) to find next(previous) occurrence.
Following code will change the font to “Arial Black” for all cells in the range which start with “John”:
Following code will replace all occurrences of “To Test” to “Passed” in the range specified:
It is important to note that you must specify a range to use FindNext. Also you must provide a stopping condition otherwise the loop will execute forever. Normally address of the first cell which is found is stored in a variable and loop is stopped when you reach that cell again. You must also check for the case when nothing is found to stop the loop.
Range Address
Use Range.Address to get the address in A1 Style
Use xlReferenceStyle (default is xlA1) to get addres in R1C1 style
This is useful when you deal with ranges stored in variables and want to process for certain addresses only.
Range to Array
It is faster and easier to transfer a range to an array and then process the values. You should declare the array as Variant to avoid calculating the size required to populate the range in the array. Array’s dimensions are set to match number of values in the range.
Array to Range
After processing you can write the Array back to a Range. To write the Array in the example above to a Range you must specify a Range whose size matches the number of elements in the Array.
Use the code below to write the Array to the range D1:D5:
Please note that you must Transpose the Array if you write it to a row.
Sum Range
You can use many functions available in Excel in your VBA code by specifying Application.WorkSheetFunction. before the Function Name as in the example above.
Count Range
Written by: Vinamra Chandra
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
На чтение 18 мин. Просмотров 74.6k.
сэр Артур Конан Дойл
Это большая ошибка — теоретизировать, прежде чем кто-то получит данные
Эта статья охватывает все, что вам нужно знать об использовании ячеек и диапазонов в VBA. Вы можете прочитать его от начала до конца, так как он сложен в логическом порядке. Или использовать оглавление ниже, чтобы перейти к разделу по вашему выбору.
Рассматриваемые темы включают свойство смещения, чтение
значений между ячейками, чтение значений в массивы и форматирование ячеек.
Содержание
- Краткое руководство по диапазонам и клеткам
- Введение
- Важное замечание
- Свойство Range
- Свойство Cells рабочего листа
- Использование Cells и Range вместе
- Свойство Offset диапазона
- Использование диапазона CurrentRegion
- Использование Rows и Columns в качестве Ranges
- Использование Range вместо Worksheet
- Чтение значений из одной ячейки в другую
- Использование метода Range.Resize
- Чтение Value в переменные
- Как копировать и вставлять ячейки
- Чтение диапазона ячеек в массив
- Пройти через все клетки в диапазоне
- Форматирование ячеек
- Основные моменты
Краткое руководство по диапазонам и клеткам
Функция | Принимает | Возвращает | Пример | Вид |
Range | адреса ячеек |
диапазон ячеек |
.Range(«A1:A4») | $A$1:$A$4 |
Cells | строка, столбец |
одна ячейка |
.Cells(1,5) | $E$1 |
Offset | строка, столбец |
диапазон | .Range(«A1:A2») .Offset(1,2) |
$C$2:$C$3 |
Rows | строка (-и) | одна или несколько строк |
.Rows(4) .Rows(«2:4») |
$4:$4 $2:$4 |
Columns | столбец (-цы) |
один или несколько столбцов |
.Columns(4) .Columns(«B:D») |
$D:$D $B:$D |
Введение
Это третья статья, посвященная трем основным элементам VBA. Этими тремя элементами являются Workbooks, Worksheets и Ranges/Cells. Cells, безусловно, самая важная часть Excel. Почти все, что вы делаете в Excel, начинается и заканчивается ячейками.
Вы делаете три основных вещи с помощью ячеек:
- Читаете из ячейки.
- Пишите в ячейку.
- Изменяете формат ячейки.
В Excel есть несколько методов для доступа к ячейкам, таких как Range, Cells и Offset. Можно запутаться, так как эти функции делают похожие операции.
В этой статье я расскажу о каждом из них, объясню, почему они вам нужны, и когда вам следует их использовать.
Давайте начнем с самого простого метода доступа к ячейкам — с помощью свойства Range рабочего листа.
Важное замечание
Я недавно обновил эту статью, сейчас использую Value2.
Вам может быть интересно, в чем разница между Value, Value2 и значением по умолчанию:
' Value2 Range("A1").Value2 = 56 ' Value Range("A1").Value = 56 ' По умолчанию используется значение Range("A1") = 56
Использование Value может усечь число, если ячейка отформатирована, как валюта. Если вы не используете какое-либо свойство, по умолчанию используется Value.
Лучше использовать Value2, поскольку он всегда будет возвращать фактическое значение ячейки.
Свойство Range
Рабочий лист имеет свойство Range, которое можно использовать для доступа к ячейкам в VBA. Свойство Range принимает тот же аргумент, что и большинство функций Excel Worksheet, например: «А1», «А3: С6» и т.д.
В следующем примере показано, как поместить значение в ячейку с помощью свойства Range.
Sub ZapisVYacheiku() ' Запишите число в ячейку A1 на листе 1 этой книги ThisWorkbook.Worksheets("Лист1").Range("A1").Value2 = 67 ' Напишите текст в ячейку A2 на листе 1 этой рабочей книги ThisWorkbook.Worksheets("Лист1").Range("A2").Value2 = "Иван Петров" ' Запишите дату в ячейку A3 на листе 1 этой книги ThisWorkbook.Worksheets("Лист1").Range("A3").Value2 = #11/21/2019# End Sub
Как видно из кода, Range является членом Worksheets, которая, в свою очередь, является членом Workbook. Иерархия такая же, как и в Excel, поэтому должно быть легко понять. Чтобы сделать что-то с Range, вы должны сначала указать рабочую книгу и рабочий лист, которому она принадлежит.
В оставшейся части этой статьи я буду использовать кодовое имя для ссылки на лист.
Следующий код показывает приведенный выше пример с использованием кодового имени рабочего листа, т.е. Лист1 вместо ThisWorkbook.Worksheets («Лист1»).
Sub IspKodImya () ' Запишите число в ячейку A1 на листе 1 этой книги Sheet1.Range("A1").Value2 = 67 ' Напишите текст в ячейку A2 на листе 1 этой рабочей книги Sheet1.Range("A2").Value2 = "Иван Петров" ' Запишите дату в ячейку A3 на листе 1 этой книги Sheet1.Range("A3").Value2 = #11/21/2019# End Sub
Вы также можете писать в несколько ячеек, используя свойство
Range
Sub ZapisNeskol() ' Запишите число в диапазон ячеек Sheet1.Range("A1:A10").Value2 = 67 ' Написать текст в несколько диапазонов ячеек Sheet1.Range("B2:B5,B7:B9").Value2 = "Иван Петров" End Sub
Свойство Cells рабочего листа
У Объекта листа есть другое свойство, называемое Cells, которое очень похоже на Range . Есть два отличия:
- Cells возвращают диапазон только одной ячейки.
- Cells принимает строку и столбец в качестве аргументов.
В приведенном ниже примере показано, как записывать значения
в ячейки, используя свойства Range и Cells.
Sub IspCells() ' Написать в А1 Sheet1.Range("A1").Value2 = 10 Sheet1.Cells(1, 1).Value2 = 10 ' Написать в А10 Sheet1.Range("A10").Value2 = 10 Sheet1.Cells(10, 1).Value2 = 10 ' Написать в E1 Sheet1.Range("E1").Value2 = 10 Sheet1.Cells(1, 5).Value2 = 10 End Sub
Вам должно быть интересно, когда использовать Cells, а когда Range. Использование Range полезно для доступа к одним и тем же ячейкам при каждом запуске макроса.
Например, если вы использовали макрос для вычисления суммы и
каждый раз записывали ее в ячейку A10, тогда Range подойдет для этой задачи.
Использование свойства Cells полезно, если вы обращаетесь к
ячейке по номеру, который может отличаться. Проще объяснить это на примере.
В следующем коде мы просим пользователя указать номер столбца. Использование Cells дает нам возможность использовать переменное число для столбца.
Sub ZapisVPervuyuPustuyuYacheiku() Dim UserCol As Integer ' Получить номер столбца от пользователя UserCol = Application.InputBox("Пожалуйста, введите номер столбца...", Type:=1) ' Написать текст в выбранный пользователем столбец Sheet1.Cells(1, UserCol).Value2 = "Иван Петров" End Sub
В приведенном выше примере мы используем номер для столбца,
а не букву.
Чтобы использовать Range здесь, потребуется преобразовать эти значения в ссылку на
буквенно-цифровую ячейку, например, «С1». Использование свойства Cells позволяет нам
предоставить строку и номер столбца для доступа к ячейке.
Иногда вам может понадобиться вернуть более одной ячейки, используя номера строк и столбцов. В следующем разделе показано, как это сделать.
Использование Cells и Range вместе
Как вы уже видели, вы можете получить доступ только к одной ячейке, используя свойство Cells. Если вы хотите вернуть диапазон ячеек, вы можете использовать Cells с Range следующим образом:
Sub IspCellsSRange() With Sheet1 ' Запишите 5 в диапазон A1: A10, используя свойство Cells .Range(.Cells(1, 1), .Cells(10, 1)).Value2 = 5 ' Диапазон B1: Z1 будет выделен жирным шрифтом .Range(.Cells(1, 2), .Cells(1, 26)).Font.Bold = True End With End Sub
Как видите, вы предоставляете начальную и конечную ячейку
диапазона. Иногда бывает сложно увидеть, с каким диапазоном вы имеете дело,
когда значением являются все числа. Range имеет свойство Address, которое
отображает буквенно-цифровую ячейку для любого диапазона. Это может
пригодиться, когда вы впервые отлаживаете или пишете код.
В следующем примере мы распечатываем адрес используемых нами
диапазонов.
Sub PokazatAdresDiapazona() ' Примечание. Использование подчеркивания позволяет разделить строки кода. With Sheet1 ' Запишите 5 в диапазон A1: A10, используя свойство Cells .Range(.Cells(1, 1), .Cells(10, 1)).Value2 = 5 Debug.Print "Первый адрес: " _ + .Range(.Cells(1, 1), .Cells(10, 1)).Address ' Диапазон B1: Z1 будет выделен жирным шрифтом .Range(.Cells(1, 2), .Cells(1, 26)).Font.Bold = True Debug.Print "Второй адрес : " _ + .Range(.Cells(1, 2), .Cells(1, 26)).Address End With End Sub
В примере я использовал Debug.Print для печати в Immediate Window. Для просмотра этого окна выберите «View» -> «в Immediate Window» (Ctrl + G).
Свойство Offset диапазона
У диапазона есть свойство, которое называется Offset. Термин «Offset» относится к отсчету от исходной позиции. Он часто используется в определенных областях программирования. С помощью свойства «Offset» вы можете получить диапазон ячеек того же размера и на определенном расстоянии от текущего диапазона. Это полезно, потому что иногда вы можете выбрать диапазон на основе определенного условия. Например, на скриншоте ниже есть столбец для каждого дня недели. Учитывая номер дня (т.е. понедельник = 1, вторник = 2 и т.д.). Нам нужно записать значение в правильный столбец.
Сначала мы попытаемся сделать это без использования Offset.
' Это Sub тесты с разными значениями Sub TestSelect() ' Понедельник SetValueSelect 1, 111.21 ' Среда SetValueSelect 3, 456.99 ' Пятница SetValueSelect 5, 432.25 ' Воскресение SetValueSelect 7, 710.17 End Sub ' Записывает значение в столбец на основе дня Public Sub SetValueSelect(lDay As Long, lValue As Currency) Select Case lDay Case 1: Sheet1.Range("H3").Value2 = lValue Case 2: Sheet1.Range("I3").Value2 = lValue Case 3: Sheet1.Range("J3").Value2 = lValue Case 4: Sheet1.Range("K3").Value2 = lValue Case 5: Sheet1.Range("L3").Value2 = lValue Case 6: Sheet1.Range("M3").Value2 = lValue Case 7: Sheet1.Range("N3").Value2 = lValue End Select End Sub
Как видно из примера, нам нужно добавить строку для каждого возможного варианта. Это не идеальная ситуация. Использование свойства Offset обеспечивает более чистое решение.
' Это Sub тесты с разными значениями Sub TestOffset() DayOffSet 1, 111.01 DayOffSet 3, 456.99 DayOffSet 5, 432.25 DayOffSet 7, 710.17 End Sub Public Sub DayOffSet(lDay As Long, lValue As Currency) ' Мы используем значение дня с Offset, чтобы указать правильный столбец Sheet1.Range("G3").Offset(, lDay).Value2 = lValue End Sub
Как видите, это решение намного лучше. Если количество дней увеличилось, нам больше не нужно добавлять код. Чтобы Offset был полезен, должна быть какая-то связь между позициями ячеек. Если столбцы Day в приведенном выше примере были случайными, мы не могли бы использовать Offset. Мы должны были бы использовать первое решение.
Следует иметь в виду, что Offset сохраняет размер диапазона. Итак .Range («A1:A3»).Offset (1,1) возвращает диапазон B2:B4. Ниже приведены еще несколько примеров использования Offset.
Sub IspOffset() ' Запись в В2 - без Offset Sheet1.Range("B2").Offset().Value2 = "Ячейка B2" ' Написать в C2 - 1 столбец справа Sheet1.Range("B2").Offset(, 1).Value2 = "Ячейка C2" ' Написать в B3 - 1 строка вниз Sheet1.Range("B2").Offset(1).Value2 = "Ячейка B3" ' Запись в C3 - 1 столбец справа и 1 строка вниз Sheet1.Range("B2").Offset(1, 1).Value2 = "Ячейка C3" ' Написать в A1 - 1 столбец слева и 1 строка вверх Sheet1.Range("B2").Offset(-1, -1).Value2 = "Ячейка A1" ' Запись в диапазон E3: G13 - 1 столбец справа и 1 строка вниз Sheet1.Range("D2:F12").Offset(1, 1).Value2 = "Ячейки E3:G13" End Sub
Использование диапазона CurrentRegion
CurrentRegion возвращает диапазон всех соседних ячеек в данный диапазон. На скриншоте ниже вы можете увидеть два CurrentRegion. Я добавил границы, чтобы прояснить CurrentRegion.
Строка или столбец пустых ячеек означает конец CurrentRegion.
Вы можете вручную проверить
CurrentRegion в Excel, выбрав диапазон и нажав Ctrl + Shift + *.
Если мы возьмем любой диапазон
ячеек в пределах границы и применим CurrentRegion, мы вернем диапазон ячеек во
всей области.
Например:
Range («B3»). CurrentRegion вернет диапазон B3:D14
Range («D14»). CurrentRegion вернет диапазон B3:D14
Range («C8:C9»). CurrentRegion вернет диапазон B3:D14 и так далее
Как пользоваться
Мы получаем CurrentRegion следующим образом
' CurrentRegion вернет B3:D14 из приведенного выше примера Dim rg As Range Set rg = Sheet1.Range("B3").CurrentRegion
Только чтение строк данных
Прочитать диапазон из второй строки, т.е. пропустить строку заголовка.
' CurrentRegion вернет B3:D14 из приведенного выше примера Dim rg As Range Set rg = Sheet1.Range("B3").CurrentRegion ' Начало в строке 2 - строка после заголовка Dim i As Long For i = 2 To rg.Rows.Count ' текущая строка, столбец 1 диапазона Debug.Print rg.Cells(i, 1).Value2 Next i
Удалить заголовок
Удалить строку заголовка (т.е. первую строку) из диапазона. Например, если диапазон — A1:D4, это возвратит A2:D4
' CurrentRegion вернет B3:D14 из приведенного выше примера Dim rg As Range Set rg = Sheet1.Range("B3").CurrentRegion ' Удалить заголовок Set rg = rg.Resize(rg.Rows.Count - 1).Offset(1) ' Начните со строки 1, так как нет строки заголовка Dim i As Long For i = 1 To rg.Rows.Count ' текущая строка, столбец 1 диапазона Debug.Print rg.Cells(i, 1).Value2 Next i
Использование Rows и Columns в качестве Ranges
Если вы хотите что-то сделать со всей строкой или столбцом,
вы можете использовать свойство «Rows и
Columns» на рабочем листе. Они оба принимают один параметр — номер строки
или столбца, к которому вы хотите получить доступ.
Sub IspRowIColumns() ' Установите размер шрифта столбца B на 9 Sheet1.Columns(2).Font.Size = 9 ' Установите ширину столбцов от D до F Sheet1.Columns("D:F").ColumnWidth = 4 ' Установите размер шрифта строки 5 до 18 Sheet1.Rows(5).Font.Size = 18 End Sub
Использование Range вместо Worksheet
Вы также можете использовать Cella, Rows и Columns, как часть Range, а не как часть Worksheet. У вас может быть особая необходимость в этом, но в противном случае я бы избегал практики. Это делает код более сложным. Простой код — твой друг. Это уменьшает вероятность ошибок.
Код ниже выделит второй столбец диапазона полужирным. Поскольку диапазон имеет только две строки, весь столбец считается B1:B2
Sub IspColumnsVRange() ' Это выделит B1 и B2 жирным шрифтом. Sheet1.Range("A1:C2").Columns(2).Font.Bold = True End Sub
Чтение значений из одной ячейки в другую
В большинстве примеров мы записали значения в ячейку. Мы
делаем это, помещая диапазон слева от знака равенства и значение для размещения
в ячейке справа. Для записи данных из одной ячейки в другую мы делаем то же
самое. Диапазон назначения идет слева, а диапазон источника — справа.
В следующем примере показано, как это сделать:
Sub ChitatZnacheniya() ' Поместите значение из B1 в A1 Sheet1.Range("A1").Value2 = Sheet1.Range("B1").Value2 ' Поместите значение из B3 в лист2 в ячейку A1 Sheet1.Range("A1").Value2 = Sheet2.Range("B3").Value2 ' Поместите значение от B1 в ячейки A1 до A5 Sheet1.Range("A1:A5").Value2 = Sheet1.Range("B1").Value2 ' Вам необходимо использовать свойство «Value», чтобы прочитать несколько ячеек Sheet1.Range("A1:A5").Value2 = Sheet1.Range("B1:B5").Value2 End Sub
Как видно из этого примера, невозможно читать из нескольких ячеек. Если вы хотите сделать это, вы можете использовать функцию копирования Range с параметром Destination.
Sub KopirovatZnacheniya() ' Сохранить диапазон копирования в переменной Dim rgCopy As Range Set rgCopy = Sheet1.Range("B1:B5") ' Используйте это для копирования из более чем одной ячейки rgCopy.Copy Destination:=Sheet1.Range("A1:A5") ' Вы можете вставить в несколько мест назначения rgCopy.Copy Destination:=Sheet1.Range("A1:A5,C2:C6") End Sub
Функция Copy копирует все, включая формат ячеек. Это тот же результат, что и ручное копирование и вставка выделения. Подробнее об этом вы можете узнать в разделе «Копирование и вставка ячеек»
Использование метода Range.Resize
При копировании из одного диапазона в другой с использованием присваивания (т.е. знака равенства) диапазон назначения должен быть того же размера, что и исходный диапазон.
Использование функции Resize позволяет изменить размер
диапазона до заданного количества строк и столбцов.
Например:
Sub ResizePrimeri() ' Печатает А1 Debug.Print Sheet1.Range("A1").Address ' Печатает A1:A2 Debug.Print Sheet1.Range("A1").Resize(2, 1).Address ' Печатает A1:A5 Debug.Print Sheet1.Range("A1").Resize(5, 1).Address ' Печатает A1:D1 Debug.Print Sheet1.Range("A1").Resize(1, 4).Address ' Печатает A1:C3 Debug.Print Sheet1.Range("A1").Resize(3, 3).Address End Sub
Когда мы хотим изменить наш целевой диапазон, мы можем
просто использовать исходный размер диапазона.
Другими словами, мы используем количество строк и столбцов
исходного диапазона в качестве параметров для изменения размера:
Sub Resize() Dim rgSrc As Range, rgDest As Range ' Получить все данные в текущей области Set rgSrc = Sheet1.Range("A1").CurrentRegion ' Получить диапазон назначения Set rgDest = Sheet2.Range("A1") Set rgDest = rgDest.Resize(rgSrc.Rows.Count, rgSrc.Columns.Count) rgDest.Value2 = rgSrc.Value2 End Sub
Мы можем сделать изменение размера в одну строку, если нужно:
Sub Resize2() Dim rgSrc As Range ' Получить все данные в ткущей области Set rgSrc = Sheet1.Range("A1").CurrentRegion With rgSrc Sheet2.Range("A1").Resize(.Rows.Count, .Columns.Count) = .Value2 End With End Sub
Чтение Value в переменные
Мы рассмотрели, как читать из одной клетки в другую. Вы также можете читать из ячейки в переменную. Переменная используется для хранения значений во время работы макроса. Обычно вы делаете это, когда хотите манипулировать данными перед тем, как их записать. Ниже приведен простой пример использования переменной. Как видите, значение элемента справа от равенства записывается в элементе слева от равенства.
Sub IspVar() ' Создайте Dim val As Integer ' Читать число из ячейки val = Sheet1.Range("A1").Value2 ' Добавить 1 к значению val = val + 1 ' Запишите новое значение в ячейку Sheet1.Range("A2").Value2 = val End Sub
Для чтения текста в переменную вы используете переменную
типа String.
Sub IspVarText() ' Объявите переменную типа string Dim sText As String ' Считать значение из ячейки sText = Sheet1.Range("A1").Value2 ' Записать значение в ячейку Sheet1.Range("A2").Value2 = sText End Sub
Вы можете записать переменную в диапазон ячеек. Вы просто
указываете диапазон слева, и значение будет записано во все ячейки диапазона.
Sub VarNeskol() ' Считать значение из ячейки Sheet1.Range("A1:B10").Value2 = 66 End Sub
Вы не можете читать из нескольких ячеек в переменную. Однако
вы можете читать массив, который представляет собой набор переменных. Мы
рассмотрим это в следующем разделе.
Как копировать и вставлять ячейки
Если вы хотите скопировать и вставить диапазон ячеек, вам не
нужно выбирать их. Это распространенная ошибка, допущенная новыми пользователями
VBA.
Вы можете просто скопировать ряд ячеек, как здесь:
Range("A1:B4").Copy Destination:=Range("C5")
При использовании этого метода копируется все — значения,
форматы, формулы и так далее. Если вы хотите скопировать отдельные элементы, вы
можете использовать свойство PasteSpecial
диапазона.
Работает так:
Range("A1:B4").Copy Range("F3").PasteSpecial Paste:=xlPasteValues Range("F3").PasteSpecial Paste:=xlPasteFormats Range("F3").PasteSpecial Paste:=xlPasteFormulas
В следующей таблице приведен полный список всех типов вставок.
Виды вставок |
xlPasteAll |
xlPasteAllExceptBorders |
xlPasteAllMergingConditionalFormats |
xlPasteAllUsingSourceTheme |
xlPasteColumnWidths |
xlPasteComments |
xlPasteFormats |
xlPasteFormulas |
xlPasteFormulasAndNumberFormats |
xlPasteValidation |
xlPasteValues |
xlPasteValuesAndNumberFormats |
Чтение диапазона ячеек в массив
Вы также можете скопировать значения, присвоив значение
одного диапазона другому.
Range("A3:Z3").Value2 = Range("A1:Z1").Value2
Значение диапазона в этом примере считается вариантом массива. Это означает, что вы можете легко читать из диапазона ячеек в массив. Вы также можете писать из массива в диапазон ячеек. Если вы не знакомы с массивами, вы можете проверить их в этой статье.
В следующем коде показан пример использования массива с
диапазоном.
Sub ChitatMassiv() ' Создать динамический массив Dim StudentMarks() As Variant ' Считать 26 значений в массив из первой строки StudentMarks = Range("A1:Z1").Value2 ' Сделайте что-нибудь с массивом здесь ' Запишите 26 значений в третью строку Range("A3:Z3").Value2 = StudentMarks End Sub
Имейте в виду, что массив, созданный для чтения, является
двумерным массивом. Это связано с тем, что электронная таблица хранит значения
в двух измерениях, то есть в строках и столбцах.
Пройти через все клетки в диапазоне
Иногда вам нужно просмотреть каждую ячейку, чтобы проверить значение.
Вы можете сделать это, используя цикл For Each, показанный в следующем коде.
Sub PeremeschatsyaPoYacheikam() ' Пройдите через каждую ячейку в диапазоне Dim rg As Range For Each rg In Sheet1.Range("A1:A10,A20") ' Распечатать адрес ячеек, которые являются отрицательными If rg.Value < 0 Then Debug.Print rg.Address + " Отрицательно." End If Next End Sub
Вы также можете проходить последовательные ячейки, используя
свойство Cells и стандартный цикл For.
Стандартный цикл более гибок в отношении используемого вами
порядка, но он медленнее, чем цикл For Each.
Sub PerehodPoYacheikam() ' Пройдите клетки от А1 до А10 Dim i As Long For i = 1 To 10 ' Распечатать адрес ячеек, которые являются отрицательными If Range("A" & i).Value < 0 Then Debug.Print Range("A" & i).Address + " Отрицательно." End If Next ' Пройдите в обратном порядке, то есть от A10 до A1 For i = 10 To 1 Step -1 ' Распечатать адрес ячеек, которые являются отрицательными If Range("A" & i) < 0 Then Debug.Print Range("A" & i).Address + " Отрицательно." End If Next End Sub
Форматирование ячеек
Иногда вам нужно будет отформатировать ячейки в электронной
таблице. Это на самом деле очень просто. В следующем примере показаны различные
форматы, которые можно добавить в любой диапазон ячеек.
Sub FormatirovanieYacheek() With Sheet1 ' Форматировать шрифт .Range("A1").Font.Bold = True .Range("A1").Font.Underline = True .Range("A1").Font.Color = rgbNavy ' Установите числовой формат до 2 десятичных знаков .Range("B2").NumberFormat = "0.00" ' Установите числовой формат даты .Range("C2").NumberFormat = "dd/mm/yyyy" ' Установите формат чисел на общий .Range("C3").NumberFormat = "Общий" ' Установить числовой формат текста .Range("C4").NumberFormat = "Текст" ' Установите цвет заливки ячейки .Range("B3").Interior.Color = rgbSandyBrown ' Форматировать границы .Range("B4").Borders.LineStyle = xlDash .Range("B4").Borders.Color = rgbBlueViolet End With End Sub
Основные моменты
Ниже приводится краткое изложение основных моментов
- Range возвращает диапазон ячеек
- Cells возвращают только одну клетку
- Вы можете читать из одной ячейки в другую
- Вы можете читать из диапазона ячеек в другой диапазон ячеек.
- Вы можете читать значения из ячеек в переменные и наоборот.
- Вы можете читать значения из диапазонов в массивы и наоборот
- Вы можете использовать цикл For Each или For, чтобы проходить через каждую ячейку в диапазоне.
- Свойства Rows и Columns позволяют вам получить доступ к диапазону ячеек этих типов
Свойства
Cвойство Range
Свойство Range возвращает объект Range, определяемый аргументами. Используются два разных способа записи свойства Range.
Первый способ object.Range(Cell1)
Второй способ object.Range(Cell1 [,Cell2])
- object — ссылка на объект, например, на рабочий лист или на интервал ячеек. Ссылка необязательна. По умолчанию используется активный лист;
- Cell1, Cell2 — аргументы для задания интервала ячеек. Cell1 — указание обязательно при обоих способах записи свойства Range.
Первый способ
Аргумент Cell1 задает интервал ячеек произвольного размера.
Важно
- Могут использоваться имена, определенные в таблице, или координаты ячеек, столбцов, строк или интервалов.
- Координаты задаются в стиле A1.
- Координаты и имена заключаются в кавычки.
- При задании интервалов координаты левого верхнего угла и правого нижнего угла интервала разделяются двоеточием.
- Для задания несмежных интервалов используется запятая.
- Для задания пересечения интервалов используется пробел.
Запись | Возвращаемый объект |
---|---|
ActiveSheet.Range(«A1:A10«) | интервал ячеек A1:A10 на активном листе |
Range(«A:B») | столбцы A:B |
Range(«налог») | интервал с именем налог |
Range(«1:3») | строки с первой по третью |
Range(«A1:C2, B10:D24″) | объединение двух несмежных интервалов A1:C2 и B10:D24 |
Range(«A1:C10 B10:D24») | пересечение двух интервалов A1:C10 и B10:D24, т.е. интервал B10:C10 |
Второй способ
Аргументы задают координаты интервала:
- Cell1 — единственная ячейка (строка или столбец), задающая левый верхний угол интервала;
- Cell2 — единственная ячейка (строка или столбец), задающая правый нижний угол интервала. Необязательный аргумент.
Допустимо задание аргументов переменными, выражениями, свойствами или методами, представляющими объект Range — одну ячейку, одну строку или один столбец рабочего листа.
Запись | Возвращаемый объект |
---|---|
Range(«A5″,»D18») | интервал A5:D18 |
Range(Columns(1), Columns(5)) | интервал, содержащий первые пять столбцов рабочего листа |
ЗАПОМНИТЕ
- Если свойство Range применяется к объекту Range, то ссылка на интервал ячеек считается относительной и возвращается смещенный объект Range.
Например, если выделен интервал C1:D5, то запись Selection.Range(«B2») возвратит ячейку D2.
Свойство Cells
Свойство Cells возвращает единственную ячейку рабочего листа, которая находится на пересечении строки и столбца, задаваемых целыми числами.
Синтаксис object.Cells (RowIndex,ColumnIndex)
- object — ссылка на объект. Ссылка необязательна. По умолчанию используется активный лист;
- RowIndex — индекс строки;
- ColumnIndex — индекс столбца.
ЗАМЕЧАНИЯ
- В свойстве Cells индекс строки является первым аргументом, а индекс столбца — вторым аргументом, тогда как при задании адреса ячейки в стиле A1 сначала указывается столбец, а затем строка.
- Понятие «индекс» ( Index, ColumnIndex, RowIndex ) всегда подразумевает целое число, целочисленную переменную или выражение, результат вычисления которого есть целое число или может быть преобразован в целое число.
Запись | Комментарий | Возвращаемый объект |
---|---|---|
ActiveSheet.Cells | Свойство Cells без аргументов | все ячейки активного рабочего листа |
Range(«C5:C10»).Cells(1,1) | Свойство Cells применяется к объекту Range (относительная ссылка) | ячейка C5 |
Range(Cells(7,3),Cells(10,4)) | Свойство Cells используется в качестве аргументов свойства Range | интервал ячеек C7:D10 |
Свойство Offset
Свойство Offset позволяет задавать ячейки или интервалы при помощи числа строк и колонок, которые отделяют нужную ячейку от исходной ячейки, т.е. указывая смещение относительно выбранной ячейки. Например, Range(«A5»).Offset(-2,1) возвращает ячейку B3.
Синтаксис object.Offset([RowOffset][,ColumnOffset])
- object — ссылка на объект Range. Ссылка обязательна и определяет объект, относительно которого задается смещение;
- RowOffset — смещение строки искомой ячейки относительно исходной ячейки;
- ColumnOffset — смещение столбца искомой ячейки относительно исходной ячейки.
Необязательные аргументы RowOffset и ColumnOffset — числовые выражения. Если какой-то аргумент не задан, то соответствующее смещение равно нулю.
Например, если выделен интервал C1:D5, то запись Selection.Offset(2,1).Select выделяет интервал D3:E7.
Метод Union и свойство Areas
Метод Union используется для объединения двух и более объектов Range, заданных ссылками на непересекающиеся интервалы, в один объект Range.
Синтаксис Object.Union (arg1,arg2,…)
- object — всегда объект Application. Ссылка необязательна;
- arg1,arg2 — интервалы ячеек. Количество аргументов произвольно. Обязательно наличие хотя бы двух аргументов.
Например, оператор Union(Range(«A1:C5»),Range(«B10:D12»)).Select выделяет несмежные интервалы A1:C5 и B10:D12.
Свойство Areas выполняет обратное действие, разделяя объединенные интервалы на несколько объектов Range.
Синтаксис Object.Areas(index)
- object — ссылка на объект Range, состоящий из нескольких интервалов;
- index — номер интервала в объекте. Аргумент необязателен.
Оператор | Комментарий | Результат |
---|---|---|
p=Union (Range(«A1:C5»), Range(«B10:D12»)).Areas(2).Count | Если аргумент задан, то свойство Areas возвращает интервал — объект Range, определенный индексом интервала | равен девяти, так как во втором интервале ровно 9 ячеек |
p=Union(Range(«A1:C5»), Range(«B10:D12»)).Areas.Count | Cвойство Areas без аргументов рассматривает каждый из несмежных интервалов как элемент коллекции объектов Range | равен двум, так как объект, определенный методом Union, состоит из двух областей — коллекции из двух элементов |
p=Range(«B10:D12»).Areas.Count | равен единице, так как объект Range представляет один элемент коллекции |
Свойства Column и Row (R/O Integer)
Свойства возвращают целое число, показывающее индекс первого столбца или первой строки соответственно для заданного объекта. Синтаксис свойств
- object — обязательная ссылка на объект Range.
Например, запись Range(«C5»).Column возвращает число 3, а запись Range(«C5»).Row возвращает число 5.
Свойства Columns и Rows
Свойство Columns (не путайте со свойством Column!) возвращает объект Range, представляющий колонку или коллекцию колонок в объекте, к которому это свойство было применено.
Синтаксис Object.Columns(index)
- object — ссылка на объект. Указание необязательно, по умолчанию используется активный рабочий лист;
- index — индекс колонки в объекте.
Например, запись Columns(1) возвращает колонку A активного рабочего листа, а запись Range(«C1:D5»).Columns(1) возвращает колонку C заданного интервала, а именно, ячейки C1:C5.
Важно
- Если не указан индекс колонки, то возвращаются все колонки объекта в виде объекта Range.
- Индекс колонки можно указывать числом или буквой, при этом буква заключается в кавычки. Ссылки Columns(2) и Columns(«B») указывают на одну и ту же колонку B.
Свойство Rows (не путайте со свойством Row!) возвращает объект Range, представляющий строку или коллекцию строк в объекте, к которому это свойство было применено.
Синтаксис Object.Rows(index)
- object — ссылка на объект. Указание необязательно, по умолчанию используется активный рабочий лист;
- index — индекс строки в объекте.
Важно
- Если не указан номер строки, то возвращаются все строки объекта в виде объекта Range.
Например, оператор nr=Selection.Rows(Selection.Rows.Count).Row позволяет получить номер последней строки в выделенном интервале ячеек.
Свойство CurrentRegion
Свойство CurrentRegion определяет объект Range, который соответствует интервалу ячеек, включающему заданную ячейку.
Пример
В процедуре сравниваются значения первой ячейки первой строки и первой ячейки каждой следующей строки заполненного данными интервала, включающего первую ячейку. Если значения совпадают, то очередная строка удаляется.
Предполагается, что данные начинаются с ячейки A1 и занимают несколько строк и столбцов, при этом расположены не плотно, т.е. внутри интервала с данными могут находиться пустые строки или пустые столбцы. Анализируются только строки заполненного данными интервала ячеек вокруг ячейки A1, не содержащего пустых строк и столбцов.
Рис.
8.9.
Пример работы со свойством CurrentRegion
Свойства | Примеры и комментарии |
---|---|
ColumnWidth (R/W Variant) | Возвращает или изменяет ширину колонки в единицах, эквивалентных одному символу в стиле Обычный ( Normal ). Шрифт стиля по умолчанию Arial Cyr и размер шрифта 10.
Range(«A1»).ColumnWidth=15 устанавливает ширину колонки A в 15 символов |
Width (R/O Variant) | Возвращает ширину интервала ячеек в пунктах.
Range(«A1»).Width возвращает значение 93.75, если ширина колонки 15 символов, шрифт Times New Roman, размер шрифта 12 пунктов (72 пункта равны 1 дюйму или приблизительно 2,54 см). Debug.Print Range(«A1:C3»).ColumnWidth распечатает значение 8.43, а оператор Debug.Print Range(«A1:C3»).Width распечатает значение 144, если для колонок установлена стандартная ширина, шрифт Arial Cyr и размер шрифта 10 |
RowHeight (R/W Variant) | Возвращает или изменяет высоту строк интервала в пунктах.
ActiveCell.RowHeight = 14 устанавливает высоту строки, в которой находится активная ячейка, в 14 пунктов |
Height (R/O Variant) | Возвращает суммарную высоту интервала строк, зависящую от названия и размера шрифта. Если шрифт Arial Cyr и размер шрифта 10, то Debug.Print Range(«A1»).Height распечатает 12,75 и Debug.Print Range(«A1:C3»).Height распечатает 38,25 |
WrapText (R/W Boolean) |
Range(«A1»).WrapText=True
Значение True разбивает текст ячейки на несколько строк, если ширина столбца недостаточна для размещения текста целиком |
Замечание
- Свойства Width и Height имеют статус Read-Only для объектов Range, но для других объектов, например, для объекта Window, они имеют статус Read-Write.
Методы
Методы Select и Activate
Метод Select выделяет интервал ячеек.
Синтаксис object.Select(Replace)
- object — выделяемый объект типа Range. Ссылка на объект обязательна;
- Replace — для расширения выделения аргумент устанавливается в False. Если аргумент не задан или принимает значение True, то вместо старой области выделения создается новая область выделения. Необязательный параметр.
Метод Activate активизирует единственную ячейку.
Синтаксис object.Activate
- object — активизируемая ячейка. Ссылка на объект обязательна.
Оператор | Активная ячейка |
---|---|
Range(«C7:E9»).Select | C7 |
Range(«C7:E9»).Offset(1,1).Activate | D8 |
Range(«C7:E9»).Activate | C7 |
Range(«C7:E9»).Cells(2,1).Activate | C8 |
ЗАМЕЧАНИЯ
- Активная ячейка выделяется фоном среди всех выделенных ячеек.
- Метод Select выделяет интервал ячеек, тогда как метод Activate активизирует только одну ячейку.
- При использовании метода Select первая ячейка интервала становится активной.
- Если выделена только одна ячейка, то она является активной и свойства ActiveCell и Selection возвращают одну и ту же ячейку (объект Range ).
Метод Clear
Очищает интервал ячеек, изменяя, таким образом, свойство Value каждой ячейки интервала.
Пример
Процедура очищает интервал ячеек или заполняет его единицами в зависимости от значений ячеек. Дополнительно изменяется шрифт и размер шрифта.
Рис.
8.10.
Пример применения метода Clear
Название шрифта является обязательным параметром вызываемой процедуры, а размер шрифта — необязательным параметром. Если он не задан, то размер шрифта принудительно меняется на 16.
Вызывающая процедура проверяет, является ли интервал ячеек A1:B5 пустым. Если это не так, то интервал очищается и размер шрифта устанавливается в 16. Если же интервал ячеек пуст, то все ячейки интервала заполняются единицами и размер шрифта интервала ячеек равен 10.
В обоих случаях шрифт ячеек интервала A1:B5 устанавливается в Times New Roman.
Цветовое оформление объекта Range
Свойство ColorIndex
Свойство ColorIndex заливки (заливка — это объект Interior, который является вложенным для объекта Range ) рассматривает цвет как номер в палитре цветов рабочей книги. Всего в палитре 56 цветов.
Пример
В ячейках, начиная с активной, отображается палитра цветов рабочей книги.
Переменные c и r содержат, соответственно, индекс столбца и индекс строки активной ячейки.
Прямоугольный интервал из 56 ячеек (7 строк и 8 столбцов, начиная с активной ячейки) для отображения палитры задается переменной obj_range, содержащей ссылку на объект Range.
Свойство Pattern (образец заливки) задается константой xlSolid, позволяющей установить заливку активных ячеек.
Свойство Color
Свойство относится к объектам Border, Font или Interior (вложенные объекты для объекта Range ) и устанавливает цвет объекта в формате RGB. Свойство можно задать, используя функцию RGB, которая возвращает цвет в виде числа типа Long. Аргументы функции Red, Green, Blue определяют насыщенность соответствующей компоненты в устанавливаемом цвете и изменяются от 0 до 255.
Например, оператор ActiveCell.Interior.Color=RGB(255, 0, 0) устанавливает красную заливку активной ячейки.
Замечание
- Не путайте свойство Color со свойством Colors! Последнее является свойством объекта Workbook и использует палитру цветов рабочей книги как массив значений цветов, например, оператор ActiveWorkbook.Colors(51) = RGB(255,0,0) меняет 51 цвет палитры активной рабочей книги на красный.
Чтобы использовать серый цвет разной интенсивности, установите равные аргументы функции RGB, например, выражение RGB(196,196,196) устанавливает 25% серую заливку. Чем больше значения аргументов, тем ближе серый цвет к белому.
Объект Range
может
представлять одну ячейку, несколько
ячеек (в том числе несмежные ячейки или
наборы несмежных ячеек) или целый лист.
CurrentRegion
— Возвращает число строк текущего
диапазона. Текущим является диапазон,
ограниченный пустыми строками и столбцами
и содержащий данный элемент. В следующем
примере переменной у присваивается
значение, равное числу строк в текущем
диапазоне, содержащем ячейку A1:
у
= Range( «A1»).CurrentRegion.Rows.Count
Объект Selection
(выделение диапазона) возникает двояко
— либо в результате работы метода Select,
либо при вызове свойства Selection. Тип
полученного объекта может быть различным
и определяется типом выделенного
объекта. Чаще всего, объект Selection
принадлежит классу Range и тогда при работе
с ним можно использовать все свойства
и методы объектов класса Range.
Пример
использования
Selection:
Range(«D1»).Select
Selection.Range(«A1»)
= 7
Selection.Range(«A2»)
= «=C1+2»
Selection.Range(«A3:A4»)
= «=C1+C2»
Пример
использования
CurrentRegion:
Dim r As
Range, r2 As Range
Set
r = Worksheets(«Лист1»).Range(«A1»).CurrentRegion
Set
r2 = r.Offset(r.Rows.Count, 0)
13)Работа с объектом Range.
Свойства Column, Row,
Columns.Count, Rows.Count, Rows(n)
и
Columns(n). Примеры.
ColumnsиRowsвозвращают соответственно семейства
столбцов и строк, из которых состоит
диапазон. В следующем примере переменным
i и j присваиваются значения, равные
количеству столбцов и строк в выделенном
диапазоне соответственно:
i = Selection. Columns . Count j = Selection. Rows
. Count
Column.CountиRows.Count.Countвозвращает число объектов в наборе. В
данном примере переменной х присваивается
значение, равное числу строк диапазонаAI: В2 :
х = Range ( «Al :B2») .Rows . Count
Column(n) иRows(n)
выбираетn-ю строку среди
заданных
Пример использования:
Setr=Selection.Rows(2)
14)Работа с объектом Range.
Обращение к ячейкам с помощью свойства
Range.Cells,
Range.Cells(r,c)
и Range.Cells(pos).
Примеры.
Cells — это свойство есть и для объекта
Range. Работает оно точно так же, за
исключением того, что опять-таки
используется своя собственная виртуальная
адресация на основе диапазона:
объект. Cells( номер_строки,
номер_столбца) ;
объект. Cells( позиция в
строке или в диапазоне) ;
объект . Cells .
Пример:
dt = Now
dt1 = Time
Range.Cells(1, 1).Value = dt
Range.Cells(5).Value = dt1
15) Работа с объектом Range.
Нахождение последней заполненной
строки и столбца диапазона. Объясните
выражения
finalRow
= Cells(Rows.Count,
1).End(xlUp).Row
и finalCol = Cells(1,
Columns.Count).End(xlLeft).Column
и
приведите примеры использования.
Range
— представляет собой ячейки, строки,
столбцы, набор ячеек, содержащих один
или более смежных блоков ячеек, или 3-D
диапазон. Однако
это определение не исключает того, что
объектом Range может
выступать и одна ячейка (Cell)
листа.
Свойства объекта Excel Range.
Рассмотрим
основные свойства объекта Range и их
применение работе в Excel
в Delphi.
1)
Formula
Возвращает или помещает в диапазон
формулу.
2)
Value
Возвращает или устанавливает
значение для диапазона.Свойство Value замечательно
тем, что с помощью него можно записать
в ячейки абсолютно любые данные, особо
не задумываясь о формате данных.
3) Text
Ещё
одно простенькое свойство объекта Range —
возвращает текст из ячейки. Самое главное
отличие от свойства Value —Text возвращает string только
для чтения и использовать это свойство
для чтения большого объема данных, как
в предыдущем примере — ни в коем случае
нельзя, т.к. переменная Val вернет
значение Null.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
12.11.2019820.22 Кб3樨1.doc
Derfler 0 / 0 / 0 Регистрация: 24.10.2014 Сообщений: 11 |
||||
1 |
||||
25.09.2012, 00:09. Показов 5629. Ответов 2 Метки нет (Все метки)
Расскажите программу?и с какой целью нужна переменная N?
0 |
200 / 98 / 2 Регистрация: 24.09.2011 Сообщений: 261 |
|
25.09.2012, 00:43 |
2 |
N — количество строк в таблице.
1 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
25.09.2012, 00:43 |
3 |
N — число строк связного диапазона непустых ячеек, в который входит G2 (этот диапазон можно выделить командой Ctrl+*).
1 |
This example illustrates the CurrentRegion property in Excel VBA. The current region is a range bounded by any combination of blank rows and blank columns. Can you find the current region of cell A1?
Place a command button on your worksheet and add the following code line:
Range(«A1»).CurrentRegion.Select
Result when you click the command button on the sheet:
Here is another example. Can you find the current region of cell B3?
Code:
Range(«B3»).CurrentRegion.Select
Result:
The value 1 in row 1 has no influence on the current region of cell B3. Row 2 is empty!