Excel vba квадратные скобки

IvanMantrov, квадратные скобки это неявный вызов метода Evaluate, т.е. в квадратных скобках должно быть выражение, которое можно интерпретировать как формулу листа, включая адреса ячеек, функции листа, имена, определенные в книге или на листе. А переменных VBA там быть не может, потому что это другое пространство имен. Значит, чтобы передать информацию в «квадратные скобки» из VBA, надо поместить ее в ячейку или в имя:

Код
Sub bb()
Dim lr
  lr = 5
  Names.Add "lrName", lr
  [OFFSET(E2,,,lrName)].Select
End Sub

То есть сделать это можно, но код усложнится,  и будет зависеть от стиля ссылок приложения: если пользователь вдруг переключит стиль ссылок на R1C1, ни .[C1], ни формула выше работать не будет.

In this guide, we’re going to show you how to refer a range or a cell in Excel VBA.

VBA Basics

Before diving into the code, let’s start with a cell or a range means in VBA. First, VBA is an object-based programming language, which means that the language refers each element as objects. Objects have properties that define them, and they can encapsulate other objects, or codes. Thus, a single cell, a range of cells, a worksheet, or Excel software as a whole is an object for VBA. You can think this as a hierarchical model.

The image illustrates only a small portion of Excel objects in VBA. An Excel instance contains a Workbooks collection. A collection is a group of related objects. For example, if you open two workbooks, the Workbooks collection has two Workbook object. Each Workbook object has its own worksheets under a Worksheets collection. This structure applies to all.

VBA envelops all cell and cell-based references in an object called Range. In theory, when a particular object is referenced, you also need to specify its parents. In VBA syntax, a dot (.) operator is used to move through object hierarchy. For example, to access the Range object, the code should be:

Application.Workbooks.Worksheets.Range

However, this reference is ambiguous when it comes to specify which Excel workbook or worksheet you are referring to. In order to do this, you must supply the name or the index number (starting with 1) of the particular object you are referring. This approach is like in Excel formulas — the argument is given in parentheses. For example to refer the range object in the worksheet “Sheet1” of the workbook “Book1.xlsm”:

Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Range

or

Application.Workbooks(1).Worksheets(1).Range

You do not have to specify all parents for Range object every time. If your intention is to work on the active sheet of the active workbook, you can simply use Range.

Range Object

The Range object allows you to refer a cell or cells just like in any Excel formula. For example,

Range("A1") 'Refers the cell A1
Range("A2:D11") 'Refers the range of cells between A2:D11
Range("A3,B4:E6,F12") 'Refers all cells in the cells A3, F12 and the range B4:E6
Range("2:2") 'Entire 2nd row
Range("E:E") 'Entire column E
Range("Input") 'Named range "Input"

Using square brackets to refer a range or a cell

You can use square brackets ([]) instead of the “Range” keyword and double quotes (“). This approach as essentially a shortcut, and the outcome is the same.

[A1] 'Refers the cell A1
[A2:D11] 'Refers the range of cells between A2:D11
[A3,B4:E6,F12] 'Refers all cells in the cells A3, F12 and the range B4:E6
[2:2] 'Entire 2nd row
[E:E] 'Entire column E
[Input] 'Named range "Input"

Cells property to refer a range or a cell

Cells is the name of a property of both Worksheet and Range objects. It is neither a collection nor an object. Thus, there are no objects named Cell.

In other words, the Cells property returns a Range object as well. Each Cells property in Worksheet and Range objects work in its parent’s context only. This behavior might make more sense within examples.

Syntax

The Cells property can be used in two ways:
With row and column index numbers:

Cells(row number,column number) 

With index number of the cell:

Cells(cell number) ‘refers the 23rd cell in the range

Examples

Worksheet.Cells

Cells property of a Worksheet object returns the cell in a specific location in the worksheet.
With row and column index numbers:

Cells(3,2) 'refers the cell at third row and second column in the active sheet (B3)

How to refer a range or a cell in Excel VBA 02
With index number of the cell:

Cells(5) 'refers the 5th cell in the range (E1)

The numbering of cells starts from 1, and increases from left to right and from top to bottom. This means that A1 is the first cell.

Range.Cells

On the other hand, the Cells property of a Range object returns the cell in specified location in the range.
With row and column index numbers:

Range("C4:F9").Cells(3,2) 'refers the cell at third row and second column in the active range (D6)


With index number of the cell:

Range("C4:F9").Cells(5) ‘refers the 5th cell in the range (C5)

Active objects to refer a range or a cell

There are keywords in VBA to reference active(selected) objects when the code is running.

ActiveCell 'Refers the selected cell
Selection 'Refers any selected object. This can be cells or a chart
ActiveSheet 'Refers the active worksheet
ActiveWorkbook 'Refers the active worksheet

Синтаксис

  • Set — оператор, используемый для установки ссылки на объект, например, на диапазон
  • Для каждого — оператор, используемый для прокрутки каждого элемента в коллекции

замечания

Обратите внимание, что имена переменных r , cell и другие могут быть названы, как вам нравится, но должны быть названы соответствующим образом, чтобы код был более понятным для вас и других.

Создание диапазона

Диапазон нельзя создать или заполнить так же, как строка:

Sub RangeTest()
    Dim s As String
    Dim r As Range 'Specific Type of Object, with members like Address, WrapText, AutoFill, etc.
    
    ' This is how we fill a String:
    s = "Hello World!"

    ' But we cannot do this for a Range:
    r = Range("A1") '//Run. Err.:  91 Object variable or With block variable not set//

    ' We have to use the Object approach, using keyword Set:
    Set r = Range("A1")
End Sub

Считается лучшей практикой, чтобы квалифицировать ваши ссылки , поэтому в дальнейшем мы будем использовать один и тот же подход.
Подробнее о создании объектных переменных (например, Range) в MSDN . Подробнее о Set Statement на MSDN .

Существуют разные способы создания одного и того же диапазона:

Sub SetRangeVariable()
    Dim ws As Worksheet
    Dim r As Range

    Set ws = ThisWorkbook.Worksheets(1) ' The first Worksheet in Workbook with this code in it
    
    ' These are all equivalent:
    Set r = ws.Range("A2")
    Set r = ws.Range("A" & 2)
    Set r = ws.Cells(2, 1) ' The cell in row number 2, column number 1
    Set r = ws.[A2] 'Shorthand notation of Range.
    Set r = Range("NamedRangeInA2") 'If the cell A2 is named NamedRangeInA2. Note, that this is Sheet independent.
    Set r = ws.Range("A1").Offset(1, 0) ' The cell that is 1 row and 0 columns away from A1
    Set r = ws.Range("A1").Cells(2,1) ' Similar to Offset. You can "go outside" the original Range.

    Set r = ws.Range("A1:A5").Cells(2) 'Second cell in bigger Range.
    Set r = ws.Range("A1:A5").Item(2) 'Second cell in bigger Range.
    Set r = ws.Range("A1:A5")(2) 'Second cell in bigger Range.
End Sub

Обратите внимание на пример, что ячейки (2, 1) эквивалентны диапазону («A2»). Это происходит потому, что Cells возвращает объект Range.
Некоторые источники: Chip Pearson-Cells Within Ranges ; Объект диапазона MSDN ; John Walkenback — ссылка на диапазоны в коде VBA .

Также обратите внимание, что в любом случае, когда число используется в объявлении диапазона, а сам номер находится вне кавычек, например Range («A» & 2), вы можете поменять это число на переменную, содержащую целое число / долго. Например:

Sub RangeIteration()
    Dim wb As Workbook, ws As Worksheet
    Dim r As Range

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)

    For i = 1 To 10
        Set r = ws.Range("A" & i)
        ' When i = 1, the result will be Range("A1")
        ' When i = 2, the result will be Range("A2")
        ' etc.
        ' Proof:
        Debug.Print r.Address
    Next i
End Sub

Если вы используете двойные циклы, ячейки лучше:

Sub RangeIteration2()
    Dim wb As Workbook, ws As Worksheet
    Dim r As Range

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)

    For i = 1 To 10
        For j = 1 To 10
            Set r = ws.Cells(i, j)
            ' When i = 1 and j = 1, the result will be Range("A1")
            ' When i = 2 and j = 1, the result will be Range("A2")
            ' When i = 1 and j = 2, the result will be Range("B1")
            ' etc.
            ' Proof:
            Debug.Print r.Address
        Next j
    Next i
End Sub

Способы обращения к одной ячейке

Самый простой способ ссылаться на одну ячейку на текущем листе Excel — это просто вставить форму А1 в ссылку в квадратных скобках:

[a3] = "Hello!"

Обратите внимание, что квадратные скобки — это просто удобный синтаксический сахар для метода Evaluate объекта Application , так что технически это идентично следующему коду:

Application.Evaluate("a3") = "Hello!"

Вы также можете вызвать метод Cells который принимает строку и столбец и возвращает ссылку на ячейку.

Cells(3, 1).Formula = "=A1+A2"

Помните, что всякий раз, когда вы передаете строку и столбец в Excel из VBA, строка всегда первая, за ней следует столбец, что запутывает, потому что это противоположно общей нотации A1 где сначала отображается столбец.

В обоих этих примерах мы не указали рабочий лист, поэтому Excel будет использовать активный лист (лист, который находится впереди в пользовательском интерфейсе). Вы можете указать активный лист явно:

ActiveSheet.Cells(3, 1).Formula = "=SUM(A1:A2)"

Или вы можете указать имя определенного листа:

Sheets("Sheet2").Cells(3, 1).Formula = "=SUM(A1:A2)"

Существует множество методов, которые можно использовать для перехода от одного диапазона к другому. Например, метод Rows может использоваться для доступа к отдельным строкам любого диапазона, и метод Cells может использоваться для доступа к отдельным ячейкам строки или столбца, поэтому следующий код относится к ячейке C1:

ActiveSheet.Rows(1).Cells(3).Formula = "hi!"

Сохранение ссылки на ячейку переменной

Чтобы сохранить ссылку на ячейку в переменной, вы должны использовать синтаксис Set , например:

Dim R as Range
Set R = ActiveSheet.Cells(3, 1)

потом…

R.Font.Color = RGB(255, 0, 0)

Почему требуется ключевое слово Set ? Set указывает Visual Basic, что значение в правой части = означает объект.

Смещение недвижимости

  • Смещение (строки, столбцы) — оператор, используемый для статической ссылки на другую точку из текущей ячейки. Часто используется в циклах. Следует понимать, что положительные числа в разделе строк перемещаются вправо, поскольку негативы перемещаются влево. С положительными позициями столбцов вниз и негативы двигаются вверх.

т.е.

Private Sub this()
    ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Select
    ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Value = "New Value"
    ActiveCell.Offset(-1, -1).Value = ActiveCell.Value
    ActiveCell.Value = vbNullString
End Sub

Этот код выбирает B2, помещает туда новую строку, затем перемещает эту строку обратно в A1 после очистки B2.

Как перемещать диапазоны (по горизонтали по вертикали и наоборот)

Sub TransposeRangeValues()
    Dim TmpArray() As Variant, FromRange as Range, ToRange as Range

    set FromRange = Sheets("Sheet1").Range("a1:a12")         'Worksheets(1).Range("a1:p1")
    set ToRange = ThisWorkbook.Sheets("Sheet1").Range("a1")  'ThisWorkbook.Sheets("Sheet1").Range("a1")

    TmpArray = Application.Transpose(FromRange.Value)
    FromRange.Clear
    ToRange.Resize(FromRange.Columns.Count,FromRange.Rows.Count).Value2 = TmpArray
End Sub

Примечание. Copy / PasteSpecial также имеет параметр «Вставить транспонирование», который также обновляет формулы транспонированных ячеек.

Содержание

  1. Свойство Range.Address (Excel)
  2. Синтаксис
  3. Параметры
  4. Примечания
  5. Пример
  6. Поддержка и обратная связь
  7. Ссылки на ячейки и диапазоны с помощью нотации A1
  8. Поддержка и обратная связь
  9. VBA Excel. Ячейки (обращение, запись, чтение, очистка)
  10. Обращение к ячейке по адресу
  11. Обращение к ячейке по индексу
  12. Обращение к ячейке по имени
  13. Запись информации в ячейку
  14. excel-vba Диапазоны и ячейки
  15. Синтаксис
  16. замечания
  17. Создание диапазона
  18. Способы обращения к одной ячейке
  19. Сохранение ссылки на ячейку переменной
  20. Смещение недвижимости
  21. Как перемещать диапазоны (по горизонтали по вертикали и наоборот)
  22. Главные свойства Range и Cells
  23. Краткое руководство по диапазонам и клеткам
  24. Введение
  25. Важное замечание
  26. Свойство Range
  27. Свойство Cells рабочего листа
  28. Использование Cells и Range вместе
  29. Свойство Offset диапазона
  30. Использование диапазона CurrentRegion
  31. Использование Rows и Columns в качестве Ranges
  32. Использование Range вместо Worksheet
  33. Чтение значений из одной ячейки в другую
  34. Использование метода Range.Resize
  35. Чтение Value в переменные
  36. Как копировать и вставлять ячейки
  37. Чтение диапазона ячеек в массив
  38. Пройти через все клетки в диапазоне
  39. Форматирование ячеек
  40. Основные моменты

Свойство Range.Address (Excel)

Возвращает строковое значение, представляющее ссылку на диапазон на языке макроса.

Синтаксис

выражение.Адрес (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
RowAbsolute Необязательный Variant Значение True, чтобы возвратить часть строки ссылки в качестве абсолютной ссылки. Значение по умолчанию — True.
ColumnAbsolute Необязательный Variant Значение True, чтобы возвратить часть столбца ссылки в качестве абсолютной ссылки. Значение по умолчанию — True.
ReferenceStyle Необязательный XlReferenceStyle Стиль ссылки. Значение по умолчанию — xlA1.
External Необязательный Variant Значение True, чтобы вернуть внешнюю ссылку. Значение False, чтобы вернуть локальную ссылку. Значение по умолчанию — False.
RelativeTo Необязательный Variant Если RowAbsolute и ColumnAbsolute имеют значение False, а ReferenceStylexlR1C1, необходимо включить начальную точку для относительной ссылки. Этот аргумент является объектом Range, определяющим начальную точку.

ПРИМЕЧАНИЕ. Тестирование с помощью Excel VBA 7.1 показывает, что явная начальная точка необязательна. По умолчанию отображается ссылка на $A$1.

Примечания

Если ссылка содержит более одной ячейки, аргументы RowAbsolute и ColumnAbsolute применяются ко всем строкам и столбцам.

Пример

В следующем примере показаны четыре различных представления одного адреса ячейки на листе Sheet1. В качестве комментариев в примере используются адреса, которые будут отображаться в окнах сообщений.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Ссылки на ячейки и диапазоны с помощью нотации A1

Ссылаться на ячейку или диапазон ячеек в стиле ссылки A1 с помощью свойства Range . Следующая подпрограмма изменяет формат ячеек A1:D5 на полужирный.

В следующей таблице показаны некоторые ссылки в стиле A1 с помощью свойства Range .

Reference Смысл
Range(«A1») Ячейка A1
Range(«A1:B5») Ячейки от A1 до B5
Range(«C5:D9,G9:H16») Выбор нескольких областей
Range(«A:A») Столбец A
Range(«1:1») Строка 1
Range(«A:C») Столбцы от A до C
Range(«1:5») Строки с 1 по 5
Range(«1:1,3:3,8:8») Строки 1, 3 и 8
Range(«A:A,C:C,F:F») Столбцы A, C и F

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VBA Excel. Ячейки (обращение, запись, чтение, очистка)

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Обращение к ячейке Range(«A1:C3»).Cells(5) соответствует выражению Range(«B2») .

Обращение к ячейке по имени

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range(«Итого») .

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Источник

excel-vba
Диапазоны и ячейки

Синтаксис

  • Set — оператор, используемый для установки ссылки на объект, например, на диапазон
  • Для каждого — оператор, используемый для прокрутки каждого элемента в коллекции

замечания

Обратите внимание, что имена переменных r , cell и другие могут быть названы, как вам нравится, но должны быть названы соответствующим образом, чтобы код был более понятным для вас и других.

Создание диапазона

Диапазон нельзя создать или заполнить так же, как строка:

Считается лучшей практикой, чтобы квалифицировать ваши ссылки , поэтому в дальнейшем мы будем использовать один и тот же подход.
Подробнее о создании объектных переменных (например, Range) в MSDN . Подробнее о Set Statement на MSDN .

Существуют разные способы создания одного и того же диапазона:

Обратите внимание на пример, что ячейки (2, 1) эквивалентны диапазону («A2»). Это происходит потому, что Cells возвращает объект Range.
Некоторые источники: Chip Pearson-Cells Within Ranges ; Объект диапазона MSDN ; John Walkenback — ссылка на диапазоны в коде VBA .

Также обратите внимание, что в любом случае, когда число используется в объявлении диапазона, а сам номер находится вне кавычек, например Range («A» & 2), вы можете поменять это число на переменную, содержащую целое число / долго. Например:

Если вы используете двойные циклы, ячейки лучше:

Способы обращения к одной ячейке

Самый простой способ ссылаться на одну ячейку на текущем листе Excel — это просто вставить форму А1 в ссылку в квадратных скобках:

Обратите внимание, что квадратные скобки — это просто удобный синтаксический сахар для метода Evaluate объекта Application , так что технически это идентично следующему коду:

Вы также можете вызвать метод Cells который принимает строку и столбец и возвращает ссылку на ячейку.

Помните, что всякий раз, когда вы передаете строку и столбец в Excel из VBA, строка всегда первая, за ней следует столбец, что запутывает, потому что это противоположно общей нотации A1 где сначала отображается столбец.

В обоих этих примерах мы не указали рабочий лист, поэтому Excel будет использовать активный лист (лист, который находится впереди в пользовательском интерфейсе). Вы можете указать активный лист явно:

Или вы можете указать имя определенного листа:

Существует множество методов, которые можно использовать для перехода от одного диапазона к другому. Например, метод Rows может использоваться для доступа к отдельным строкам любого диапазона, и метод Cells может использоваться для доступа к отдельным ячейкам строки или столбца, поэтому следующий код относится к ячейке C1:

Сохранение ссылки на ячейку переменной

Чтобы сохранить ссылку на ячейку в переменной, вы должны использовать синтаксис Set , например:

Почему требуется ключевое слово Set ? Set указывает Visual Basic, что значение в правой части = означает объект.

Смещение недвижимости

  • Смещение (строки, столбцы) — оператор, используемый для статической ссылки на другую точку из текущей ячейки. Часто используется в циклах. Следует понимать, что положительные числа в разделе строк перемещаются вправо, поскольку негативы перемещаются влево. С положительными позициями столбцов вниз и негативы двигаются вверх.

Этот код выбирает B2, помещает туда новую строку, затем перемещает эту строку обратно в A1 после очистки B2.

Как перемещать диапазоны (по горизонтали по вертикали и наоборот)

Примечание. Copy / PasteSpecial также имеет параметр «Вставить транспонирование», который также обновляет формулы транспонированных ячеек.

Источник

Главные свойства Range и Cells

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

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

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

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

Функция Принимает Возвращает Пример Вид
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 и значением по умолчанию:

Использование Value может усечь число, если ячейка отформатирована, как валюта. Если вы не используете какое-либо свойство, по умолчанию используется Value.

Лучше использовать Value2, поскольку он всегда будет возвращать фактическое значение ячейки.

Свойство Range

Рабочий лист имеет свойство Range, которое можно использовать для доступа к ячейкам в VBA. Свойство Range принимает тот же аргумент, что и большинство функций Excel Worksheet, например: «А1», «А3: С6» и т.д.

В следующем примере показано, как поместить значение в ячейку с помощью свойства Range.

Как видно из кода, Range является членом Worksheets, которая, в свою очередь, является членом Workbook. Иерархия такая же, как и в Excel, поэтому должно быть легко понять. Чтобы сделать что-то с Range, вы должны сначала указать рабочую книгу и рабочий лист, которому она принадлежит.

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

Следующий код показывает приведенный выше пример с использованием кодового имени рабочего листа, т.е. Лист1 вместо ThisWorkbook.Worksheets («Лист1»).

Вы также можете писать в несколько ячеек, используя свойство Range

Свойство Cells рабочего листа

У Объекта листа есть другое свойство, называемое Cells, которое очень похоже на Range . Есть два отличия:

  1. Cells возвращают диапазон только одной ячейки.
  2. Cells принимает строку и столбец в качестве аргументов.

В приведенном ниже примере показано, как записывать значения в ячейки, используя свойства Range и Cells.

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

Например, если вы использовали макрос для вычисления суммы и каждый раз записывали ее в ячейку A10, тогда Range подойдет для этой задачи.

Использование свойства Cells полезно, если вы обращаетесь к ячейке по номеру, который может отличаться. Проще объяснить это на примере.

В следующем коде мы просим пользователя указать номер столбца. Использование Cells дает нам возможность использовать переменное число для столбца.

В приведенном выше примере мы используем номер для столбца, а не букву.

Чтобы использовать Range здесь, потребуется преобразовать эти значения в ссылку на буквенно-цифровую ячейку, например, «С1». Использование свойства Cells позволяет нам предоставить строку и номер столбца для доступа к ячейке.

Иногда вам может понадобиться вернуть более одной ячейки, используя номера строк и столбцов. В следующем разделе показано, как это сделать.

Использование Cells и Range вместе

Как вы уже видели, вы можете получить доступ только к одной ячейке, используя свойство Cells. Если вы хотите вернуть диапазон ячеек, вы можете использовать Cells с Range следующим образом:

Как видите, вы предоставляете начальную и конечную ячейку диапазона. Иногда бывает сложно увидеть, с каким диапазоном вы имеете дело, когда значением являются все числа. Range имеет свойство Address, которое отображает буквенно-цифровую ячейку для любого диапазона. Это может пригодиться, когда вы впервые отлаживаете или пишете код.

В следующем примере мы распечатываем адрес используемых нами диапазонов.

В примере я использовал Debug.Print для печати в Immediate Window. Для просмотра этого окна выберите «View» -> «в Immediate Window» (Ctrl + G).

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

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

Сначала мы попытаемся сделать это без использования Offset.

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

Как видите, это решение намного лучше. Если количество дней увеличилось, нам больше не нужно добавлять код. Чтобы Offset был полезен, должна быть какая-то связь между позициями ячеек. Если столбцы Day в приведенном выше примере были случайными, мы не могли бы использовать Offset. Мы должны были бы использовать первое решение.

Следует иметь в виду, что Offset сохраняет размер диапазона. Итак .Range («A1:A3»).Offset (1,1) возвращает диапазон B2:B4. Ниже приведены еще несколько примеров использования Offset.

Использование диапазона 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 следующим образом

Только чтение строк данных

Прочитать диапазон из второй строки, т.е. пропустить строку заголовка.

Удалить заголовок

Удалить строку заголовка (т.е. первую строку) из диапазона. Например, если диапазон — A1:D4, это возвратит A2:D4

Использование Rows и Columns в качестве Ranges

Если вы хотите что-то сделать со всей строкой или столбцом, вы можете использовать свойство «Rows и Columns» на рабочем листе. Они оба принимают один параметр — номер строки или столбца, к которому вы хотите получить доступ.

Использование Range вместо Worksheet

Вы также можете использовать Cella, Rows и Columns, как часть Range, а не как часть Worksheet. У вас может быть особая необходимость в этом, но в противном случае я бы избегал практики. Это делает код более сложным. Простой код — твой друг. Это уменьшает вероятность ошибок.

Код ниже выделит второй столбец диапазона полужирным. Поскольку диапазон имеет только две строки, весь столбец считается B1:B2

Чтение значений из одной ячейки в другую

В большинстве примеров мы записали значения в ячейку. Мы делаем это, помещая диапазон слева от знака равенства и значение для размещения в ячейке справа. Для записи данных из одной ячейки в другую мы делаем то же самое. Диапазон назначения идет слева, а диапазон источника — справа.

В следующем примере показано, как это сделать:

Как видно из этого примера, невозможно читать из нескольких ячеек. Если вы хотите сделать это, вы можете использовать функцию копирования Range с параметром Destination.

Функция Copy копирует все, включая формат ячеек. Это тот же результат, что и ручное копирование и вставка выделения. Подробнее об этом вы можете узнать в разделе «Копирование и вставка ячеек»

Использование метода Range.Resize

При копировании из одного диапазона в другой с использованием присваивания (т.е. знака равенства) диапазон назначения должен быть того же размера, что и исходный диапазон.

Использование функции Resize позволяет изменить размер диапазона до заданного количества строк и столбцов.

Когда мы хотим изменить наш целевой диапазон, мы можем просто использовать исходный размер диапазона.

Другими словами, мы используем количество строк и столбцов исходного диапазона в качестве параметров для изменения размера:

Мы можем сделать изменение размера в одну строку, если нужно:

Чтение Value в переменные

Мы рассмотрели, как читать из одной клетки в другую. Вы также можете читать из ячейки в переменную. Переменная используется для хранения значений во время работы макроса. Обычно вы делаете это, когда хотите манипулировать данными перед тем, как их записать. Ниже приведен простой пример использования переменной. Как видите, значение элемента справа от равенства записывается в элементе слева от равенства.

Для чтения текста в переменную вы используете переменную типа String.

Вы можете записать переменную в диапазон ячеек. Вы просто указываете диапазон слева, и значение будет записано во все ячейки диапазона.

Вы не можете читать из нескольких ячеек в переменную. Однако вы можете читать массив, который представляет собой набор переменных. Мы рассмотрим это в следующем разделе.

Как копировать и вставлять ячейки

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

Вы можете просто скопировать ряд ячеек, как здесь:

При использовании этого метода копируется все — значения, форматы, формулы и так далее. Если вы хотите скопировать отдельные элементы, вы можете использовать свойство PasteSpecial диапазона.

В следующей таблице приведен полный список всех типов вставок.

Виды вставок
xlPasteAll
xlPasteAllExceptBorders
xlPasteAllMergingConditionalFormats
xlPasteAllUsingSourceTheme
xlPasteColumnWidths
xlPasteComments
xlPasteFormats
xlPasteFormulas
xlPasteFormulasAndNumberFormats
xlPasteValidation
xlPasteValues
xlPasteValuesAndNumberFormats

Чтение диапазона ячеек в массив

Вы также можете скопировать значения, присвоив значение одного диапазона другому.

Значение диапазона в этом примере считается вариантом массива. Это означает, что вы можете легко читать из диапазона ячеек в массив. Вы также можете писать из массива в диапазон ячеек. Если вы не знакомы с массивами, вы можете проверить их в этой статье.

В следующем коде показан пример использования массива с диапазоном.

Имейте в виду, что массив, созданный для чтения, является двумерным массивом. Это связано с тем, что электронная таблица хранит значения в двух измерениях, то есть в строках и столбцах.

Пройти через все клетки в диапазоне

Иногда вам нужно просмотреть каждую ячейку, чтобы проверить значение.

Вы можете сделать это, используя цикл For Each, показанный в следующем коде.

Вы также можете проходить последовательные ячейки, используя свойство Cells и стандартный цикл For.

Стандартный цикл более гибок в отношении используемого вами порядка, но он медленнее, чем цикл For Each.

Форматирование ячеек

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

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

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

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

Источник

����������� ������� Range

����������� ������� Range

� Excel ������� ��������� ��������� ������� ������������� ��������� �� ����� ��� ���������� �����, �� ������� ������ �������������� ���������� ���. ��� ���������� ������ ���� ������������ ���������.

����������� ������ �� ������. ��� ���������� �1-����� ������ �� ������ ��������, �������, ����� ������� �������� ������ � ��������� Range. ��� ����������� ��������� ���������� ������ ��������� � ������� � ������ ����� ��������� ����� Range, ��� �������� � ��������� �������:

ActiveSheet.Range(«B3»)

Worksheets(«Sheet 2»).Range(«M5:S20»)

����������� ���������. ���� ������� ���� �������� ����������� ���������, VBA ������� Range ����� ��������� �� ���, ��� �������� � ��������� �������:

Worksheets(«���������� �����»).Range(«������� ���������»)

��� ���������� ��������� ����� ��������������� � ����� ���� ���������� ���������� ��������� ��������� � �������������� �������� �������� Name (���):

Range(«A3:�4»)-Name = «�����-����»

����������� ������. ���������� ������� ������������� �������� Range, Excel ��������� �������� �������� ����� Range ��� ����������� ��������� ��� ������ � �1 -����� ��� ��� ������ � �������������� �����. ��� ���������� ������ ������ ������ �� ������ ��� ��� ��������� ������� ��������� � ���������� ������, ��� �������� � ����������� ���� �������:

ActiveSheet[«Al:Z26»]

[«����������� �����»]

�������� Cells ������� Worksheets. ������ ������� ������ ���������� ��������������, ��� ��� ��������� ���������� �������� �� ����� �������� ������������� ������� ������, � �� ������ ����������. �������� ���� ������� � ����������� � �������� ���� ������ ��������� ����� � �������� ���������. ������� �� ���� � ������� «������������� �������� Cells ��� ����������� ���������» ������ � ������ �����.

�������� Selection (���������). ����� ��������� ����������� ���� �� ��������, ��������������� ��������� ������������, ������������ �������� Selection. ������� �� ���� � ������� «������ � �����������» ������ � ������ �����.

�������� ActiveCell (�������� ������). �������� Active Cell ������������ ��� ������� � ���������, ��������������� �������� ������ ������� ����. ��� ������������� ��� ������������� ������� (��� ������������ ������������� ������� Application), �������� Active Cell ��������� �� �������� ����:

ValueStorageBi n = ActiveCell.Value

�������� Rows (������) ��� Columns (�������) ������� Worksheet. ������ � ���������, ����������� ���� ������� ��� ������, �������������� � ������� ������� �������� ����� Rows � Columns � �������������� ������ ������������ ������� ��� ������ (������ ���������� ������� ����� ��� ��������� �����������). � ��������� ������� ������������ ��������, ���������� ������� �, �.�. ����� �������:

Workbooks(«IOU.xls»).Worksheets(«Sheetshoot out»).Column(5)

������������ ������������� ������ �� �������. ��������� �������� �������� ��������, ����� ���������� ����������� ��������� ������ �� ����, ����� ���� ������ � ��������� �������������� � ������� �������� ����� ������. ������ ������� ������������ ����� � �������, ��� ������������ �������� ������������� ���������. ����� ��������� ��������� ������ RanGer, ��� �������� � ����������� �������, ����� ������������ ��� �������� � ����� ����������, ��� RanGer . Value:

Dim RanGer As Range Set RanGer = Worksheets(«����1»).Range(«B12:H13» )

Понравилась статья? Поделить с друзьями:
  • Excel vba какой лист активный
  • Excel vba какая ячейка выделена
  • Excel vba как ячейке значение другой ячейки
  • Excel vba как установить цвет ячейки в
  • Excel vba как указать ячейку