Currentregion excel что это

Свойство 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


Содержание

  1. VBA Current Region
  2. CurrentRegion Syntax
  3. Obtain the Current Region
  4. Counting the Rows and Columns in the Current Region
  5. Clearing the Current Region
  6. Assigning the Current Region to a Variable
  7. Get the Start and End Cells in the Current Region
  8. VBA Coding Made Easy
  9. VBA Code Examples Add-in
  10. Vba excel что такое currentregion
  11. Excel VBA Ranges and Cells
  12. Ranges and Cells in VBA
  13. Cell Address
  14. A1 Notation
  15. R1C1 Notation
  16. Range of Cells
  17. A1 Notation
  18. R1C1 Notation
  19. Writing to Cells
  20. Reading from Cells
  21. Non Contiguous Cells
  22. VBA Coding Made Easy
  23. Intersection of Cells
  24. Offset from a Cell or Range
  25. Offset Syntax
  26. Offset from a cell
  27. Offset from a Range
  28. Setting Reference to a Range
  29. Resize a Range
  30. Resize Syntax
  31. OFFSET vs Resize
  32. All Cells in Sheet
  33. UsedRange
  34. CurrentRegion
  35. Range Properties
  36. Last Cell in Sheet
  37. Last Used Row Number in a Column
  38. Last Used Column Number in a Row
  39. Cell Properties
  40. Common Properties
  41. Cell Font
  42. Copy and Paste
  43. Paste All
  44. Paste Special
  45. AutoFit Contents
  46. More Range Examples
  47. For Each
  48. Range Address
  49. Range to Array
  50. Array to Range
  51. Sum Range
  52. Count Range
  53. 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

сэр Артур Конан Дойл

Это большая ошибка — теоретизировать, прежде чем кто-то получит данные

Эта статья охватывает все, что вам нужно знать об использовании ячеек и диапазонов в VBA. Вы можете прочитать его от начала до конца, так как он сложен в логическом порядке. Или использовать оглавление ниже, чтобы перейти к разделу по вашему выбору.

Рассматриваемые темы включают свойство смещения, чтение
значений между ячейками, чтение значений в массивы и форматирование ячеек.

Содержание

  1. Краткое руководство по диапазонам и клеткам
  2. Введение
  3. Важное замечание
  4. Свойство Range
  5. Свойство Cells рабочего листа
  6. Использование Cells и Range вместе
  7. Свойство Offset диапазона
  8. Использование диапазона CurrentRegion
  9. Использование Rows и Columns в качестве Ranges
  10. Использование Range вместо Worksheet
  11. Чтение значений из одной ячейки в другую
  12. Использование метода Range.Resize
  13. Чтение Value в переменные
  14. Как копировать и вставлять ячейки
  15. Чтение диапазона ячеек в массив
  16. Пройти через все клетки в диапазоне
  17. Форматирование ячеек
  18. Основные моменты

Краткое руководство по диапазонам и клеткам

Функция Принимает Возвращает Пример Вид
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, начинается и заканчивается ячейками.

Вы делаете три основных вещи с помощью ячеек:

  1. Читаете из ячейки.
  2. Пишите в ячейку.
  3. Изменяете формат ячейки.

В 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, вы должны сначала указать рабочую книгу и рабочий лист, которому она принадлежит.

В оставшейся части этой статьи я буду использовать кодовое имя для ссылки на лист.

code name worksheet

Следующий код показывает приведенный выше пример с использованием кодового имени рабочего листа, т.е. Лист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 . Есть два отличия:

  1. Cells возвращают диапазон только одной ячейки.
  2. 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).

ImmediateWindow

ImmediateSampeText

Свойство Offset диапазона

У диапазона есть свойство, которое называется Offset. Термин «Offset» относится к отсчету от исходной позиции. Он часто используется в определенных областях программирования. С помощью свойства «Offset» вы можете получить диапазон ячеек того же размера и на определенном расстоянии от текущего диапазона. Это полезно, потому что иногда вы можете выбрать диапазон на основе определенного условия. Например, на скриншоте ниже есть столбец для каждого дня недели. Учитывая номер дня (т.е. понедельник = 1, вторник = 2 и т.д.). Нам нужно записать значение в правильный столбец.

VBA Offset

Сначала мы попытаемся сделать это без использования 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.

VBA 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

Основные моменты

Ниже приводится краткое изложение основных моментов

  1. Range возвращает диапазон ячеек
  2. Cells возвращают только одну клетку
  3. Вы можете читать из одной ячейки в другую
  4. Вы можете читать из диапазона ячеек в другой диапазон ячеек.
  5. Вы можете читать значения из ячеек в переменные и наоборот.
  6. Вы можете читать значения из диапазонов в массивы и наоборот
  7. Вы можете использовать цикл For Each или For, чтобы проходить через каждую ячейку в диапазоне.
  8. Свойства Rows и Columns позволяют вам получить доступ к диапазону ячеек этих типов

Свойства

Cвойство Range

Свойство Range возвращает объект Range, определяемый аргументами. Используются два разных способа записи свойства Range.

Первый способ object.Range(Cell1)

Второй способ object.Range(Cell1 [,Cell2])

  • object — ссылка на объект, например, на рабочий лист или на интервал ячеек. Ссылка необязательна. По умолчанию используется активный лист;
  • Cell1, Cell2 — аргументы для задания интервала ячеек. Cell1 — указание обязательно при обоих способах записи свойства Range.

Первый способ

Аргумент Cell1 задает интервал ячеек произвольного размера.

Важно

  • Могут использоваться имена, определенные в таблице, или координаты ячеек, столбцов, строк или интервалов.
  • Координаты задаются в стиле A1.
  • Координаты и имена заключаются в кавычки.
  • При задании интервалов координаты левого верхнего угла и правого нижнего угла интервала разделяются двоеточием.
  • Для задания несмежных интервалов используется запятая.
  • Для задания пересечения интервалов используется пробел.
Примеры записи оператора Range (1 способ)

Запись Возвращаемый объект
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 (2 способ)

Запись Возвращаемый объект
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 ) всегда подразумевает целое число, целочисленную переменную или выражение, результат вычисления которого есть целое число или может быть преобразован в целое число.
Примеры записи свойства Cells

Запись Комментарий Возвращаемый объект
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, не содержащего пустых строк и столбцов.

Пример работы со свойством CurrentRegion

Рис.
8.9.
Пример работы со свойством CurrentRegion

Cвойства, связанные с шириной и высотой ячейки

Свойства Примеры и комментарии
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 каждой ячейки интервала.

Пример

Процедура очищает интервал ячеек или заполняет его единицами в зависимости от значений ячеек. Дополнительно изменяется шрифт и размер шрифта.

Пример применения метода Clear

Рис.
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

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Visual Basic
1
2
3
4
5
Private Sub UserForm_Initialize()
Dim N As Integer
N = Worksheets("Пары лыж").Range("G2").CurrentRegion.Rows.Count
ComboBox1.List = Worksheets("Пары лыж").Range("G2", Worksheets("Пары лыж").Cells(N, 7)).Value
End Sub

Расскажите программу?и с какой целью нужна переменная N?



0



200 / 98 / 2

Регистрация: 24.09.2011

Сообщений: 261

25.09.2012, 00:43

2

N — количество строк в таблице.
У тебя на листе «Пары лыж» есть таблица. В ней есть столбец номер 7 (столбец G). Вышеприведенный код значения из этого столбца заносит в список возможных значений ComboBox



1



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

25.09.2012, 00:43

3

N — число строк связного диапазона непустых ячеек, в который входит G2 (этот диапазон можно выделить командой Ctrl+*).
Потом берется диапазон от G2 до GN и массив его значений загружается в комбо.



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?

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:

Current region of cell A1

Here is another example. Can you find the current region of cell B3?

Can you find the current region of cell B3?

Code:

Range(«B3»).CurrentRegion.Select

Result:

Current region of cell B3

The value 1 in row 1 has no influence on the current region of cell B3. Row 2 is empty!

Понравилась статья? Поделить с друзьями:
  • Current document in word
  • Current date with time in excel
  • Currency number to word
  • Currency exchange in excel
  • Cure for all diseases one word