Excel макрос что такое value

Содержание

  1. VBA Value — Как использовать функцию значения VBA Excel?
  2. VBA Value
  3. Как использовать функцию значения VBA Excel?
  4. Пример # 1 — Установить значение ячейки с помощью функции Range.Value
  5. Пример №2 — установка значения ячейки с использованием свойства VBA Cells
  6. Пример № 3 — Получить значение ячейки в VBA
  7. Пример № 4 — Можем ли мы получить несколько значений ячеек одновременно?
  8. То, что нужно запомнить
  9. Рекомендуемые статьи
  10. Свойство Range.Value (Excel)
  11. Синтаксис
  12. Параметры
  13. Замечания
  14. Пример
  15. Поддержка и обратная связь

VBA Value — Как использовать функцию значения VBA Excel?

VBA Value

Путешествие по VBA начинается со знания того, как значения хранятся в ячейках. Следовательно, знание функции VALUE в VBA имеет большее значение. После изучения свойства VBA VALUE вы сможете узнать, как значения хранятся в VBA. В этой статье описываются все типы функций VALUE в VBA, например, как значение хранится в ячейках, как быстро установить значение, как вставить значение и многое другое.

Как использовать функцию значения VBA Excel?

Мы научимся использовать функцию VBA Value на нескольких примерах в Excel.

Вы можете скачать этот шаблон Excel VBA Value здесь — Шаблон Excel VBA Value

Пример # 1 — Установить значение ячейки с помощью функции Range.Value

Установка значения ячейки / с использованием Range. Функция значения примерно состоит из двух важных шагов:

  • Установка диапазона, в котором вы хотите сохранить значение.
  • Присвоение значения заданному диапазону.

Выполните следующие шаги, чтобы установить значение в Excel VBA:

Шаг 1. Вставьте новый модуль в редактор Visual Basic (VBE).

Шаг 2: Определите новую подпроцедуру под вставленным модулем, чтобы в нем можно было сохранить макрос.

Код:

Шаг 3: Определите новую переменную как диапазон, который можно использовать для определения диапазона, в котором вы хотите сохранить значение.

Код:

Шаг 4: С помощью функции VBA RANGE присвойте ячейки в диапазоне переменной, определенной с помощью оператора присваивания.

Код:

Шаг 5: Теперь используйте свойство Range.Value, чтобы иметь возможность присвоить значение определенному диапазону. Введите имя переменной «setValue_Var», под которой определяется диапазон.

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

Код:

Шаг 7: Перетащите вниз по списку и выберите функцию «Значение», чтобы сохранить значение в этой переменной диапазона.

Код:

Шаг 8: Назначьте «Добро пожаловать в мир VBA!» В качестве значения для этого диапазона, используя оператор присваивания.

Код:

Шаг 9: Мы закончили с частью кодирования. Запустите этот код, нажав F5 или кнопку Run под VBE и посмотрите результат.

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

Шаг 10: В том же коде выше измените диапазон с «A1» на «A1: A5».

Код:

Шаг 11: Нажмите F5 или кнопку Run и посмотрите результат.

Пример №2 — установка значения ячейки с использованием свойства VBA Cells

Это еще один способ установки значения ячейки в VBA. В отличие от функции RANGE, ячейки даже не нуждаются в них. Значение оператора, чтобы иметь возможность установить значение для конкретной ячейки / с.

Выполните следующие шаги, чтобы установить значение ячейки в Excel VBA:

Шаг 1: Вставьте новый модуль в VBE, где вы можете начать писать свой новый кусок кода.

Шаг 2: Добавьте новую подпроцедуру под вставленным модулем, где вы можете сохранить свой код макроса.

Код:

Шаг 3: Начните вводить thisWorkbook.Worksheet для доступа к листу с именем «Setting_Cell_Value_2».

Код:

Шаг 4: Упомяните имя листа в скобках в двойных кавычках.

Код:

Шаг 5 : Используйте свойство .Cells, чтобы установить диапазон ячеек из данного листа Excel.

Код:

Первый аргумент свойства Cells представляет строки, а второй аргумент представляет столбец. Следовательно, Ячейки (1, 1) означают ячейку, связанную с первой строкой и первым столбцом листа «Setting_Cell_Value_2».

Шаг 6: Теперь, с помощью оператора присваивания, присвойте значение этому набору ячеек.

Код:

Посмотрите, что нам не нужна функция .Value, которую мы должны использовать при установке значения с помощью функции Range. Метод Cells не имеет таких параметров IntelliSense.

Шаг 7: Нажмите F5 или кнопку Run, чтобы запустить этот код и увидеть результат. Вы увидите вывод, как показано на скриншоте ниже.

Пример № 3 — Получить значение ячейки в VBA

До сих пор в двух примерах мы видели, как установить значение для ячейки или диапазона ячеек. Теперь предположим, что случай в точности обратный, мы должны получить значение, назначенное конкретной ячейке таблицы Excel. Как мы можем получить это? Давайте пройдемся по пошаговой инструкции.

Предположим, я присвоил значение, как показано на скриншоте ниже под первой ячейкой столбца A на листе «Getting_Cell_Value».

Выполните следующие шаги, чтобы получить значение ячейки в Excel VBA:

Шаг 1: Вставьте новый модуль под VBE.

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

Код:

Шаг 3: Определите новую переменную с именем Get_Value как вариант, используя функцию VBA Dim.

Код:

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

Шаг 4. Введите «Get_Value = ThisWorkbook.Worksheets». Это позволит компилятору VBA получить доступ к таблице Excel, где хранится ваше значение.

Код:

Шаг 5. Упомяните имя листа в скобках с цитатами, в которых хранится значение.

Код:

Шаг 6: Теперь используйте метод Range (.) Range, чтобы указать точную ячейку, в которой хранится значение под листом «Getting_Cell_Value».

Код:

Шаг 7: Наконец, используйте метод Точка (.) Значение, чтобы компилятор мог получить доступ к фактическому значению в ячейке A1.

Код:

Шаг 8: Как мы уже говорили, нам нужно получить значение, хранящееся в ячейке A1. Для этого используйте MsgBox, чтобы показать значение переменной Get_Value (которая уже получила доступ к значению, введенному в ячейке A1).

Код:

Шаг 9: Нажмите F5 или кнопку Run, чтобы запустить этот код, вы получите значение, присутствующее в ячейке A1 под окном сообщения.

Видите, это было значение, которое мы упомянули в ячейке A1 листа «Getting_Cell_Value». Правильно?

Пример № 4 — Можем ли мы получить несколько значений ячеек одновременно?

Предположим, у меня есть значения, хранящиеся в трех разных ячейках A1, A2, A3, как показано на скриншоте ниже:

Только не запутайтесь, если вы видите текст, разбросанный по столбцам от A до E. Это просто видимый макет (потому что я объединил ячейки), а фактическое значение хранится только в ячейках A1, A2, A3.

Выполните следующие шаги, чтобы использовать Excel VBA Value:

Шаг 1: Определите переменную как вариант в новой подпроцедуре в вашем модуле VBA.

Шаг 2: Используйте метод Range.Value, чтобы получить значение ячеек A1: A3 и назначить новую переменную, определенную на предыдущем шаге.

Код:

Шаг 3: Наконец, используйте функцию MsgBox для отображения значений, хранящихся в ячейке A1: A3.

Код:

Шаг 4: Нажмите F5 или кнопку Run и посмотрите вывод для этого кода.

Вы получите ошибку во время выполнения ’13 ‘: несоответствие типов. Причиной получения этой ошибки является то, что мы определяем одну переменную и присваиваем ей значения одномерного массива (с тремя строками). Что логически невозможно.

Это из этой статьи. Давайте завернем вещи с некоторыми пунктами, которые будут помнить.

То, что нужно запомнить

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

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

Рекомендуемые статьи

Это было руководство к VBA Value. Здесь мы обсудили, как использовать функцию VBA Excel вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Полное руководство по VBA при ошибке
  2. Как использовать числовой формат VBA?
  3. VBA VLOOKUP Функция с примерами
  4. Создание функции VBA в Excel
  5. Как использовать функцию VBA Val?

Источник

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

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

Синтаксис

expression. Value (RangeValueDataType)

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

Параметры

Имя Обязательный или необязательный Тип данных Описание
RangeValueDataType Необязательный Variant Тип данных значения диапазона. Может быть константой XlRangeValueDataType .

Замечания

При задании диапазона ячеек с содержимым XML-файла электронной таблицы используются только значения первого листа в книге. Невозможно задать или получить несогласительный диапазон ячеек в формате электронной таблицы XML.

Элемент range по умолчанию переадресовывает вызовы значения value без параметров. Таким образом, someRange = someOtherRange эквивалентно someRange.Value = someOtherRange.Value .

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

При назначении массива размером 2 тумм для свойства Value значения будут скопированы в диапазон за одну операцию. Если целевой диапазон больше массива, остальные ячейки получат значение ошибки.

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

Пример

В этом примере для ячейки A1 на листе 1 активной книги задается значение 3,14159.

В этом примере выполняется цикл по ячейкам A1:D10 на листе 1 активной книги. Если одна из ячеек имеет значение меньше 0,001, код заменяет значение на 0 (ноль).

В этом примере выполняется цикл над значениями в диапазоне A1:CC5000 на Листе1. Если одно из значений меньше 0,001, код заменяет значение на 0 (ноль). Наконец, он копирует значения в исходный диапазон.

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

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

Источник

  • VBA Value

VBA Value

Путешествие по VBA начинается со знания того, как значения хранятся в ячейках. Следовательно, знание функции VALUE в VBA имеет большее значение. После изучения свойства VBA VALUE вы сможете узнать, как значения хранятся в VBA. В этой статье описываются все типы функций VALUE в VBA, например, как значение хранится в ячейках, как быстро установить значение, как вставить значение и многое другое.

Как использовать функцию значения VBA Excel?

Мы научимся использовать функцию VBA Value на нескольких примерах в Excel.

Вы можете скачать этот шаблон Excel VBA Value здесь — Шаблон Excel VBA Value

Пример # 1 — Установить значение ячейки с помощью функции Range.Value

Установка значения ячейки / с использованием Range. Функция значения примерно состоит из двух важных шагов:

  • Установка диапазона, в котором вы хотите сохранить значение.
  • Присвоение значения заданному диапазону.

Выполните следующие шаги, чтобы установить значение в Excel VBA:

Шаг 1. Вставьте новый модуль в редактор Visual Basic (VBE).

Шаг 2: Определите новую подпроцедуру под вставленным модулем, чтобы в нем можно было сохранить макрос.

Код:

 Sub VBA_Value_Ex1 () End Sub 

Шаг 3: Определите новую переменную как диапазон, который можно использовать для определения диапазона, в котором вы хотите сохранить значение.

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Sub End Sub 

Шаг 4: С помощью функции VBA RANGE присвойте ячейки в диапазоне переменной, определенной с помощью оператора присваивания.

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Range ("A1") End Sub 

Шаг 5: Теперь используйте свойство Range.Value, чтобы иметь возможность присвоить значение определенному диапазону. Введите имя переменной «setValue_Var», под которой определяется диапазон.

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Диапазон ("A1") setValue_Var End Sub 

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

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Диапазон ("A1") setValue_Var. End Sub 

Шаг 7: Перетащите вниз по списку и выберите функцию «Значение», чтобы сохранить значение в этой переменной диапазона.

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Range ("A1") setValue_Var.Value End Sub 

Шаг 8: Назначьте «Добро пожаловать в мир VBA!» В качестве значения для этого диапазона, используя оператор присваивания.

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Range ("A1") setValue_Var.Value = "Добро пожаловать в мир VBA!" End Sub 

Шаг 9: Мы закончили с частью кодирования. Запустите этот код, нажав F5 или кнопку Run под VBE и посмотрите результат.

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

Шаг 10: В том же коде выше измените диапазон с «A1» на «A1: A5».

Код:

 Sub VBA_Value_Ex1 () Dim setValue_Var As Range Set setValue_Var = ThisWorkbook.Worksheets ("Setting_Cell_Value_1"). Range ("A1: A5") setValue_Var.Value = "Добро пожаловать в мир VBA!" End Sub 

Шаг 11: Нажмите F5 или кнопку Run и посмотрите результат.

Пример №2 — установка значения ячейки с использованием свойства VBA Cells

Это еще один способ установки значения ячейки в VBA. В отличие от функции RANGE, ячейки даже не нуждаются в них. Значение оператора, чтобы иметь возможность установить значение для конкретной ячейки / с.

Выполните следующие шаги, чтобы установить значение ячейки в Excel VBA:

Шаг 1: Вставьте новый модуль в VBE, где вы можете начать писать свой новый кусок кода.

Шаг 2: Добавьте новую подпроцедуру под вставленным модулем, где вы можете сохранить свой код макроса.

Код:

 Sub VBA_Value_Ex2 () End Sub 

Шаг 3: Начните вводить thisWorkbook.Worksheet для доступа к листу с именем «Setting_Cell_Value_2».

Код:

 Sub VBA_Value_Ex2 () ThisWorkbook.worksheets End Sub 

Шаг 4: Упомяните имя листа в скобках в двойных кавычках.

Код:

 Sub VBA_Value_Ex2 () ThisWorkbook.Worksheets ("Setting_Cell_Value_2") End Sub 

Шаг 5 : Используйте свойство .Cells, чтобы установить диапазон ячеек из данного листа Excel.

Код:

 Sub VBA_Value_Ex2 () ThisWorkbook.Worksheets ("Setting_Cell_Value_2"). Ячейки (1, 1) End Sub 

Первый аргумент свойства Cells представляет строки, а второй аргумент представляет столбец. Следовательно, Ячейки (1, 1) означают ячейку, связанную с первой строкой и первым столбцом листа «Setting_Cell_Value_2».

Шаг 6: Теперь, с помощью оператора присваивания, присвойте значение этому набору ячеек.

Код:

 Sub VBA_Value_Ex2 () ThisWorkbook.Worksheets ("Setting_Cell_Value_2"). Ячейки (1, 1) = "VBA является гибким." End Sub 

Посмотрите, что нам не нужна функция .Value, которую мы должны использовать при установке значения с помощью функции Range. Метод Cells не имеет таких параметров IntelliSense.

Шаг 7: Нажмите F5 или кнопку Run, чтобы запустить этот код и увидеть результат. Вы увидите вывод, как показано на скриншоте ниже.

Пример № 3 — Получить значение ячейки в VBA

До сих пор в двух примерах мы видели, как установить значение для ячейки или диапазона ячеек. Теперь предположим, что случай в точности обратный, мы должны получить значение, назначенное конкретной ячейке таблицы Excel. Как мы можем получить это? Давайте пройдемся по пошаговой инструкции.

Предположим, я присвоил значение, как показано на скриншоте ниже под первой ячейкой столбца A на листе «Getting_Cell_Value».

Выполните следующие шаги, чтобы получить значение ячейки в Excel VBA:

Шаг 1: Вставьте новый модуль под VBE.

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

Код:

 Sub VBA_Value_Ex3 () End Sub 

Шаг 3: Определите новую переменную с именем Get_Value как вариант, используя функцию VBA Dim.

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант конца Sub 

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

Шаг 4. Введите «Get_Value = ThisWorkbook.Worksheets». Это позволит компилятору VBA получить доступ к таблице Excel, где хранится ваше значение.

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант Get_Value = ThisWorkbook.Worksheets End Sub 

Шаг 5. Упомяните имя листа в скобках с цитатами, в которых хранится значение.

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант Get_Value = ThisWorkbook.Worksheets ("Getting_Cell_Value") End Sub 

Шаг 6: Теперь используйте метод Range (.) Range, чтобы указать точную ячейку, в которой хранится значение под листом «Getting_Cell_Value».

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант Get_Value = ThisWorkbook.Worksheets ("Getting_Cell_Value"). Range ("A1") End Sub 

Шаг 7: Наконец, используйте метод Точка (.) Значение, чтобы компилятор мог получить доступ к фактическому значению в ячейке A1.

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант Get_Value = ThisWorkbook.Worksheets ("Getting_Cell_Value"). Диапазон ("A1"). Значение End Sub 

Шаг 8: Как мы уже говорили, нам нужно получить значение, хранящееся в ячейке A1. Для этого используйте MsgBox, чтобы показать значение переменной Get_Value (которая уже получила доступ к значению, введенному в ячейке A1).

Код:

 Sub VBA_Value_Ex3 () Dim Get_Value как вариант Get_Value = ThisWorkbook.Worksheets ("Getting_Cell_Value"). Диапазон ("A1"). Значение MsgBox Get_Value End Sub 

Шаг 9: Нажмите F5 или кнопку Run, чтобы запустить этот код, вы получите значение, присутствующее в ячейке A1 под окном сообщения.

Видите, это было значение, которое мы упомянули в ячейке A1 листа «Getting_Cell_Value». Правильно?

Пример № 4 — Можем ли мы получить несколько значений ячеек одновременно?

Предположим, у меня есть значения, хранящиеся в трех разных ячейках A1, A2, A3, как показано на скриншоте ниже:

Только не запутайтесь, если вы видите текст, разбросанный по столбцам от A до E. Это просто видимый макет (потому что я объединил ячейки), а фактическое значение хранится только в ячейках A1, A2, A3.

Выполните следующие шаги, чтобы использовать Excel VBA Value:

Шаг 1: Определите переменную как вариант в новой подпроцедуре в вашем модуле VBA.

 Код: Sub VBA_Value_Ex4 () Dim Get_Value_2 как вариант конца Sub 

Шаг 2: Используйте метод Range.Value, чтобы получить значение ячеек A1: A3 и назначить новую переменную, определенную на предыдущем шаге.

Код:

 Sub VBA_Value_Ex4 () Dim Get_Value_2 как вариант Get_Value_2 = ThisWorkbook.Worksheets ("Getting_Cell_Value_2"). Диапазон ("A1: A3"). Значение End Sub 

Шаг 3: Наконец, используйте функцию MsgBox для отображения значений, хранящихся в ячейке A1: A3.

Код:

 Sub VBA_Value_Ex4 () Dim Get_Value_2 как вариант Get_Value_2 = ThisWorkbook.Worksheets ("Getting_Cell_Value_2"). Диапазон ("A1: A3"). Значение MsgBox Get_Value_2 End Sub 

Шаг 4: Нажмите F5 или кнопку Run и посмотрите вывод для этого кода.

Вы получите ошибку во время выполнения ’13 ‘: несоответствие типов. Причиной получения этой ошибки является то, что мы определяем одну переменную и присваиваем ей значения одномерного массива (с тремя строками). Что логически невозможно.

Это из этой статьи. Давайте завернем вещи с некоторыми пунктами, которые будут помнить.

То, что нужно запомнить

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

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

Рекомендуемые статьи

Это было руководство к VBA Value. Здесь мы обсудили, как использовать функцию VBA Excel вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Полное руководство по VBA при ошибке
  2. Как использовать числовой формат VBA?
  3. VBA VLOOKUP Функция с примерами
  4. Создание функции VBA в Excel
  5. Как использовать функцию VBA Val?

Свойства ячейки, часто используемые в коде VBA Excel. Демонстрация свойств ячейки, как структурной единицы объекта Range, на простых примерах.

Объект Range в VBA Excel представляет диапазон ячеек. Он (объект Range) может описывать любой диапазон, начиная от одной ячейки и заканчивая сразу всеми ячейками рабочего листа.

Примеры диапазонов:

  • Одна ячейка – Range("A1").
  • Девять ячеек – Range("A1:С3").
  • Весь рабочий лист в Excel 2016 – Range("1:1048576").

Для справки: выражение Range("1:1048576") описывает диапазон с 1 по 1048576 строку, где число 1048576 – это номер последней строки на рабочем листе Excel 2016.

В VBA Excel есть свойство Cells объекта Range, которое позволяет обратиться к одной ячейке в указанном диапазоне (возвращает объект Range в виде одной ячейки). Если в коде используется свойство Cells без указания диапазона, значит оно относится ко всему диапазону активного рабочего листа.

Примеры обращения к одной ячейке:

  • Cells(1000), где 1000 – порядковый номер ячейки на рабочем листе, возвращает ячейку «ALL1».
  • Cells(50, 20), где 50 – номер строки рабочего листа, а 20 – номер столбца, возвращает ячейку «T50».
  • Range("A1:C3").Cells(6), где «A1:C3» – заданный диапазон, а 6 – порядковый номер ячейки в этом диапазоне, возвращает ячейку «C2».

Для справки: порядковый номер ячейки в диапазоне считается построчно слева направо с перемещением к следующей строке сверху вниз.

Подробнее о том, как обратиться к ячейке, смотрите в статье: Ячейки (обращение, запись, чтение, очистка).

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

Еще надо добавить, что свойства и методы объектов отделяются от объектов точкой, как в третьем примере обращения к одной ячейке: Range("A1:C3").Cells(6).

Свойства ячейки (объекта Range)

Свойство Описание
Address Возвращает адрес ячейки (диапазона).
Borders Возвращает коллекцию Borders, представляющую границы ячейки (диапазона). Подробнее…
Cells Возвращает объект Range, представляющий коллекцию всех ячеек заданного диапазона. Указав номер строки и номер столбца или порядковый номер ячейки в диапазоне, мы получаем конкретную ячейку. Подробнее…
Characters Возвращает подстроку в размере указанного количества символов из текста, содержащегося в ячейке. Подробнее…
Column Возвращает номер столбца ячейки (первого столбца диапазона). Подробнее…
ColumnWidth Возвращает или задает ширину ячейки в пунктах (ширину всех столбцов в указанном диапазоне).
Comment Возвращает комментарий, связанный с ячейкой (с левой верхней ячейкой диапазона).
CurrentRegion Возвращает прямоугольный диапазон, ограниченный пустыми строками и столбцами. Очень полезное свойство для возвращения рабочей таблицы, а также определения номера последней заполненной строки.
EntireColumn Возвращает весь столбец (столбцы), в котором содержится ячейка (диапазон). Диапазон может содержаться и в одном столбце, например, Range("A1:A20").
EntireRow Возвращает всю строку (строки), в которой содержится ячейка (диапазон). Диапазон может содержаться и в одной строке, например, Range("A2:H2").
Font Возвращает объект Font, представляющий шрифт указанного объекта. Подробнее о цвете шрифта…
HorizontalAlignment Возвращает или задает значение горизонтального выравнивания содержимого ячейки (диапазона). Подробнее…
Interior Возвращает объект Interior, представляющий внутреннюю область ячейки (диапазона). Применяется, главным образом, для возвращения или назначения цвета заливки (фона) ячейки (диапазона). Подробнее…
Name Возвращает или задает имя ячейки (диапазона).
NumberFormat Возвращает или задает код числового формата для ячейки (диапазона). Примеры кодов числовых форматов можно посмотреть, открыв для любой ячейки на рабочем листе Excel диалоговое окно «Формат ячеек», на вкладке «(все форматы)». Свойство NumberFormat диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковый числовой формат. Если нужно присвоить ячейке текстовый формат, записывается так: Range("A1").NumberFormat = "@". Общий формат: Range("A1").NumberFormat = "General".
Offset Возвращает объект Range, смещенный относительно первоначального диапазона на указанное количество строк и столбцов. Подробнее…
Resize Изменяет размер первоначального диапазона до указанного количества строк и столбцов. Строки добавляются или удаляются снизу, столбцы – справа. Подробнее…
Row Возвращает номер строки ячейки (первой строки диапазона). Подробнее…
RowHeight Возвращает или задает высоту ячейки в пунктах (высоту всех строк в указанном диапазоне).
Text Возвращает форматированный текст, содержащийся в ячейке. Свойство Text диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковое содержимое и один формат. Предназначено только для чтения. Подробнее…
Value Возвращает или задает значение ячейки, в том числе с отображением значений в формате Currency и Date. Тип данных Variant. Value является свойством ячейки по умолчанию, поэтому в коде его можно не указывать.
Value2 Возвращает или задает значение ячейки. Тип данных Variant. Значения в формате Currency и Date будут отображены в виде чисел с типом данных Double.
VerticalAlignment Возвращает или задает значение вертикального выравнивания содержимого ячейки (диапазона). Подробнее…

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

Простые примеры для начинающих

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

Учтите, что в одном программном модуле у всех процедур должны быть разные имена. Если вы уже копировали в модуль подпрограммы с именами Primer1, Primer2 и т.д., удалите их или создайте еще один стандартный модуль.

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

Заливка ячейки фоном, изменение высоты строки, запись в ячейки текста, автоподбор ширины столбца, выравнивание текста в ячейке и выделение его цветом, добавление границ к ячейкам, очистка содержимого и форматирования ячеек.

Если вы запустите эту процедуру, информационное окно MsgBox будет прерывать выполнение программы и сообщать о том, что произойдет дальше, после его закрытия.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Sub Primer1()

MsgBox «Зальем ячейку A1 зеленым цветом и запишем в ячейку B1 текст: «Ячейка A1 зеленая!»»

Range(«A1»).Interior.Color = vbGreen

Range(«B1»).Value = «Ячейка A1 зеленая!»

MsgBox «Сделаем высоту строки, в которой находится ячейка A2, в 2 раза больше высоты ячейки A1, « _

& «а в ячейку B1 вставим текст: «Наша строка стала в 2 раза выше первой строки!»»

Range(«A2»).RowHeight = Range(«A1»).RowHeight * 2

Range(«B2»).Value = «Наша строка стала в 2 раза выше первой строки!»

MsgBox «Запишем в ячейку A3 высоту 2 строки, а в ячейку B3 вставим текст: «Такова высота второй строки!»»

Range(«A3»).Value = Range(«A2»).RowHeight

Range(«B3»).Value = «Такова высота второй строки!»

MsgBox «Применим к столбцу, в котором содержится ячейка B1, метод AutoFit для автоподбора ширины»

Range(«B1»).EntireColumn.AutoFit

MsgBox «Выделим текст в ячейке B2 красным цветом и выровним его по центру (по вертикали)»

Range(«B2»).Font.Color = vbRed

Range(«B2»).VerticalAlignment = xlCenter

MsgBox «Добавим к ячейкам диапазона A1:B3 границы»

Range(«A1:B3»).Borders.LineStyle = True

MsgBox «Сделаем границы ячеек в диапазоне A1:B3 двойными»

Range(«A1:B3»).Borders.LineStyle = xlDouble

MsgBox «Очистим ячейки диапазона A1:B3 от заливки, выравнивания, границ и содержимого»

Range(«A1:B3»).Clear

MsgBox «Присвоим высоте второй строки высоту первой, а ширине второго столбца — ширину первого»

Range(«A2»).RowHeight = Range(«A1»).RowHeight

Range(«B1»).ColumnWidth = Range(«A1»).ColumnWidth

MsgBox «Демонстрация форматирования ячеек закончена!»

End Sub

Вычисления в ячейках (свойство Value)

Запись двух чисел в ячейки, вычисление их произведения, вставка в ячейку формулы, очистка ячеек.

Обратите внимание, что разделителем дробной части у чисел в VBA Excel является точка, а не запятая.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Sub Primer2()

MsgBox «Запишем в ячейку A1 число 25.3, а в ячейку B1 — число 34.42»

Range(«A1»).Value = 25.3

Range(«B1»).Value = 34.42

MsgBox «Запишем в ячейку C1 произведение чисел, содержащихся в ячейках A1 и B1»

Range(«C1»).Value = Range(«A1»).Value * Range(«B1»).Value

MsgBox «Запишем в ячейку D1 формулу, которая перемножает числа в ячейках A1 и B1»

Range(«D1»).Value = «=A1*B1»

MsgBox «Заменим содержимое ячеек A1 и B1 на числа 6.258 и 54.1, а также активируем ячейку D1»

Range(«A1»).Value = 6.258

Range(«B1»).Value = 54.1

Range(«D1»).Activate

MsgBox «Мы видим, что в ячейке D1 произведение изменилось, а в строке состояния отображается формула; « _

& «следующим шагом очищаем задействованные ячейки»

Range(«A1:D1»).Clear

MsgBox «Демонстрация вычислений в ячейках завершена!»

End Sub

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

Различие свойств Text, Value и Value2

Построение с помощью кода VBA Excel таблицы с результатами сравнения того, как свойства Text, Value и Value2 возвращают число, дату и текст.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

Sub Primer3()

‘Присваиваем ячейкам всей таблицы общий формат на тот

‘случай, если формат отдельных ячеек ранее менялся

Range(«A1:E4»).NumberFormat = «General»

‘добавляем сетку (границы ячеек)

Range(«A1:E4»).Borders.LineStyle = True

‘Создаем строку заголовков

Range(«A1») = «Значение»

Range(«B1») = «Код формата» ‘формат соседней ячейки в столбце A

Range(«C1») = «Свойство Text»

Range(«D1») = «Свойство Value»

Range(«E1») = «Свойство Value2»

‘Назначаем строке заголовков жирный шрифт

Range(«A1:E1»).Font.Bold = True

‘Задаем форматы ячейкам A2, A3 и A4

‘Ячейка A2 — числовой формат с разделителем триад и двумя знаками после запятой

‘Ячейка A3 — формат даты «ДД.ММ.ГГГГ»

‘Ячейка A4 — текстовый формат

Range(«A2»).NumberFormat = «# ##0.00»

Range(«A3»).NumberFormat = «dd.mm.yyyy»

Range(«A4»).NumberFormat = «@»

‘Заполняем ячейки A2, A3 и A4 значениями

Range(«A2») = 2362.4568

Range(«A3») = CDate(«01.01.2021»)

‘Функция CDate преобразует текстовый аргумент в формат даты

Range(«A4») = «Озеро Байкал»

‘Заполняем ячейки B2, B3 и B4 кодами форматов соседних ячеек в столбце A

Range(«B2») = Range(«A2»).NumberFormat

Range(«B3») = Range(«A3»).NumberFormat

Range(«B4») = Range(«A4»).NumberFormat

‘Присваиваем ячейкам C2-C4 значения свойств Text ячеек A2-A4

Range(«C2») = Range(«A2»).Text

Range(«C3») = Range(«A3»).Text

Range(«C4») = Range(«A4»).Text

‘Присваиваем ячейкам D2-D4 значения свойств Value ячеек A2-A4

Range(«D2») = Range(«A2»).Value

Range(«D3») = Range(«A3»).Value

Range(«D4») = Range(«A4»).Value

‘Присваиваем ячейкам E2-E4 значения свойств Value2 ячеек A2-A4

Range(«E2») = Range(«A2»).Value2

Range(«E3») = Range(«A3»).Value2

Range(«E4») = Range(«A4»).Value2

‘Применяем к таблице автоподбор ширины столбцов

Range(«A1:E4»).EntireColumn.AutoFit

End Sub

Результат работы кода:

Сравнение свойств ячейки Text, Value и Value2

В таблице наглядно видна разница между свойствами Text, Value и Value2 при применении их к ячейкам с отформатированным числом и датой. Свойство Text еще отличается от Value и Value2 тем, что оно предназначено только для чтения.


 

Ни где не могу найти, что означает (смысл) .Value, например Range.Value. Нигде найти не могу, а везде применяется

 

CAT

Пользователь

Сообщений: 49
Регистрация: 01.01.1970

Value — значение какого-либо элемента.  
Например TextBox1.Value = «Hello» означает, что в текстовое поле textBox1 формы , будет вставлено значение Hello.  
А ещё может использоваться вот таким образом.    
OptionButton1.Value = true  
Это значит что когда код дойдёт до этой строки, то включится переключатель  OptionButton1.  

  А так если не знаешь, то в перв. очередь глянь в обычный англ-рус словарь. Дальше по смыслу можно понять, куда прикручивается то или иное свойство и зачем.

 

air

Пользователь

Сообщений: 90
Регистрация: 01.01.1970

Если не знаете VBA настолько, что не знаете смысл Value, то, наверное, надо бы что-нибудь обобщенное про VBA почитать. Например по ссылкам, предложенным на этом сайте (здесь есть свойство Value:

http://msoffice.nm.ru/vba/range.htm)

.  
Без обид, сужу по себе.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

#4

24.11.2008 15:53:07

value — это имя процедуры, осуществляющей доступ к свойству объекта  

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

Живи и дай жить..

Value is a property in VBA mostly used with the range method to assign a value to a specific range. It is an inbuilt expression in VBA. For example, if we use range(“B3”).value = 3, this will assign cell B3 a value of 3, which does not necessarily mean that one must use the Value property with only the Range method. We can use it with other functions as well.

Early in our learning with VBA, we are curious to learn how to store the data in the cells. If you are that curious, you need to understand the “Value” property. This article will explain the “Value” property, insert or set values, get value from the cell, and many other things.

In one of the earlier articles, we discussed “VBA Range CellsRange is a property in VBA that helps specify a particular cell, a range of cells, a row, a column, or a three-dimensional range. In the context of the Excel worksheet, the VBA range object includes a single cell or multiple cells spread across various rows and columns.read more.” The Range object can help us refer to single and multiple cells. To use the RANGE object first, we need to decide for which cell we need to insert the value and what value we will insert.

Table of contents
  • Excel VBA Value Property
    • How to use Value Property in VBA?
      • Example #1 – Range Object to Assign Values to Cells
      • Example #2 – Insert Value using CELLS Property
      • Example #3 – Get Cell Value
      • Example 4 – Error Value if More than One Cell Value Requires
    • Recommended Articles

VBA Value Property

How to use Value Property in VBA?

You can download this VBA Value Function Excel Template here – VBA Value Function Excel Template

Example #1 – Range Object to Assign Values to Cells

  • If you want to insert a value to cell A1, then you should refer the cell A1 like this Range(“A1”)

Code:

Sub Value()

  Range ("A1")

End Sub

VBA Value Example 1

  • After referring to the cell using the RANGE object, now put a dot (.) to see the IntelliSense list of all the properties and methods associated with this object.

Code:

Sub Value()

  Range ("A1").

End Sub

VBA Value Example 1-1

  • From this variety of options, select the property “VALUE.”

Code:

Sub Value()

  Range("A1").Value

End Sub

VBA Value Example 1-2

  • Once the VALUE property is selected, we need to set the value to cell A1 by putting the value in an equal sign.

Code:

Sub Value()

  Range("A1").Value = "Welcome to VBA"

End Sub

Example 1-3

  • It will insert the value “Welcome to VBA” to cell A1.

Example 1-4

  • If you want to insert the same value to multiple cells, refer to the cells like the code below.

Code:

Sub Value()

  Range("A1:A5").Value = "Welcome to VBA"

End Sub
  • It will insert the value from cell A1 to A5.

Example 1-5

  • If you want to insert values to different cells but not for the cell series, then we need to use code and the cell address in separate arguments like the one below.

Code:

Sub Value()

  Range("A1,A5,B4,C2").Value = "Welcome to VBA"

End Sub
  • It will insert the text “Welcome to VBA” to cells A1, A5, B4, and C2.

Example 1-6

Example #2 – Insert Value using CELLS Property

Not through the RANGE object but also using the VBA CELLS propertyCells are cells of the worksheet, and in VBA, when we refer to cells as a range property, we refer to the same cells. In VBA concepts, cells are also the same, no different from normal excel cells.read more, we can insert values. But, one of the problems with the CELLS object is we do not get access to the IntelliSense list as we got for the RANGE object.

Using CELLS Property

Here, we need to mention the row and column numbers. Then, we need to insert the value. For example, if you want to insert the value to cell A1, the code is CELLS(1,1). If you want to insert the value to the cell B5, then the code is CELLS(5,2), i.e., equal to the B5 cell.

We cannot insert values into multiple cells by using the CELLS property. This is unlike our RANGE object.

Example #3 – Get Cell Value

We have seen how to insert values into the cells. Now, we will see how to get values from cells.

Step 1: Define a variable as String.

Code:

Sub Value()

  Dim K As String

End Sub

Step 2: For this variable “k,” we will assign the value of the cell A1. In cell A1, we have entered the value “Welcome to VBA.”

Get Cell Value 1

So the code will be k = Range(“A1”).Value

Code:

Sub Value()

  Dim K As String

  K = Range("A1").Value

End Sub

Step 3: Show the variable “k” result in the VBA message boxVBA MsgBox function is an output function which displays the generalized message provided by the developer. This statement has no arguments and the personalized messages in this function are written under the double quotes while for the values the variable reference is provided.read more.

Code:

Sub Value()

  Dim K As String

  K = Range("A1").Value

  MsgBox K

End Sub

By running the code, we should see the result of the cell A1 value in the message box.

Get Cell Value 1-2

We can also use the RANGE object to get the data of cell A1. The below code will show you the same.

Code:

Sub Value()

  Dim K As String

  Set CellValue = Range("A1")

  MsgBox CellValue

End Sub

It should also get the value of cell A1 in the message box.

Example 4 – Error Value if More than One Cell Value Requires

Look at the below code.

Code:

Sub Value()

  Dim K As Range

  Set CellValue = Range("A1:A5")

  MsgBox CellValue

End Sub

If you run the above code, we will get the “Type Mismatch” error.

We get this error when we set the object variable to more than one cell “value.” This is because the property does not understand which cell value is given, so it can get a single cell value at a time.

Recommended Articles

This article has been a guide to VBA Value Property. Here, we learn how to get the VBA object cell value and range to assign values to cells, along with examples and a downloadable Excel template. Below are some useful Excel articles related to VBA: –

  • VBA Union
  • VBA ArrayList
  • VBA UpperCase Function
  • Match in VBA

2 / 2 / 1

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

Сообщений: 41

1

18.05.2013, 13:25. Показов 14469. Ответов 9


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

за что отвечает value в данном случае??

n = Cells(2, 2).Value



0



5468 / 1148 / 50

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

Сообщений: 3,514

18.05.2013, 14:14

2

Progrozy, это данные, которые содержатся в ячейке.



1



4377 / 661 / 36

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

Сообщений: 2,134

18.05.2013, 14:41

3

Progrozy, или, в добавление к Скрипт, перевод Value (eng.) = Значение (рус.)



1



2 / 2 / 1

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

Сообщений: 41

18.05.2013, 16:15

 [ТС]

4

а если например убрать валью и оставить только
n = Cells(2, 2) тогда чем это отличается от предыдущего?



0



4377 / 661 / 36

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

Сообщений: 2,134

18.05.2013, 16:20

5

Ну тогда это означает, что Вы черезчур слишком доверяете железке. Опасно…



1



2 / 2 / 1

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

Сообщений: 41

18.05.2013, 16:22

 [ТС]

6

не, ну не смешно , зачем там нужен валью, мне нужен какой нибудь конкретный ответ)) чем опасно его отсутствие?



0



4377 / 661 / 36

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

Сообщений: 2,134

18.05.2013, 16:25

7

Тогда Вам к «курсор на Value и F1». Или к ууумной книге.



0



5468 / 1148 / 50

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

Сообщений: 3,514

18.05.2013, 17:13

8

Цитата
Сообщение от Progrozy
Посмотреть сообщение

а если например убрать валью и оставить только
n = Cells(2, 2) тогда чем это отличается от предыдущего?

У «Cells()» два свойства по умолчанию:

  1. просто Cells() — это сама ячейка;
  2. Value — это данные в ячейке.

VBA анализирует переменную «n» и выбирает одно из двух свойств.

Если VBA распознало, что нужно использовать «Value», то разницы нет между:
n = Cells(2, 2)
n = Cells(2, 2).Value

Писать «Value» можно только для того, чтобы удобнее читать код. Ведь логичнее написать «n = Cells(2, 2).Value», чем «n = Cells(2, 2)».



4



2 / 2 / 1

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

Сообщений: 41

18.05.2013, 17:19

 [ТС]

9

Спасибо!



0



Казанский

15136 / 6410 / 1730

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

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

18.05.2013, 17:58

10

Лучший ответ Сообщение было отмечено как решение

Решение

Вообще, явно указывать свойство — хорошая привычка. Например, удобный и быстрый способ превратить формулу в значение:

Visual Basic
1
Cells(2, 2).Value = Cells(2, 2).Value

Если Вы напишете Cells(2, 2) = Cells(2, 2) — все сработает нормально. Но если Вы попробуете сделать то же самое с диапазоном, состоящем из нескольких ячеек — будете сильно удивлены:

Visual Basic
1
Range("A1:A5") = Range("A1:A5") 'попробуйте, предварительно введя значения или формулы в А1:А5

А так — сработает нормально:

Visual Basic
1
2
3
4
5
6
Range("A1:A5").Value = Range("A1:A5").Value
 
'или
With Range("A1:A5")
    .Value = .Value
End With



6



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

18.05.2013, 17:58

10

Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.

Содержание:

Table of Contents:

  • Что такое ячейка Excel?
  • Способы обращения к ячейкам
    • Выбор и активация
    • Получение и изменение значений ячеек
      • Ячейки открытой книги
      • Ячейки закрытой книги 
    • Перебор ячеек
    • Перебор в произвольном диапазоне
  • Свойства и методы ячеек
    • Имя ячейки
    • Адрес ячейки
    • Размеры ячейки
  • Запуск макроса активацией ячейки

2 нюанса:

  1. Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги. 
  2. Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.

Что такое ячейка Excel?

В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.

Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:

  1. по цифровым координатам (ряд, столбец),
  2. по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
  3. по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.

Все три способа обращения описаны далее

Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.

Пример содержимого файла Excel:

Далее xl -> worksheets и мы видим файл листа

Содержимое файла:

 То же, но более наглядно:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
	<dimension ref="B2:F6"/>
	<sheetViews>
		<sheetView tabSelected="1" workbookViewId="0">
			<selection activeCell="D12" sqref="D12"/>
		</sheetView>
	</sheetViews>
	<sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/>
	<sheetData>
		<row r="2" spans="2:6" x14ac:dyDescent="0.3">
			<c r="B2" t="s">
				<v>0</v>
			</c>
		</row>
		<row r="3" spans="2:6" x14ac:dyDescent="0.3">
			<c r="C3" t="s">
				<v>1</v>
			</c>
		</row>
		<row r="4" spans="2:6" x14ac:dyDescent="0.3">
			<c r="D4" t="s">
				<v>2</v>
			</c>
		</row>
		<row r="5" spans="2:6" x14ac:dyDescent="0.3">
			<c r="E5" t="s">
				<v>0</v></c>
		</row>
		<row r="6" spans="2:6" x14ac:dyDescent="0.3">
			<c r="F6" t="s"><v>3</v>
		</c></row>
	</sheetData>
	<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>

Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.

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

Выбор и активация

Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:

  1. Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
  2. Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.

Можно выбирать и активировать книги, листы, ячейки, фигуры, диаграммы, срезы, таблицы и т.д.

Отменить выбор  ячеек можно методом Unselect:

Selection.Unselect

Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.

Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:

Sub Macro1()
' Macro1 Macro
    Range("F4:F10,H6:H10").Select 'выбрали два несмежных диапазона зажав ctrl
    Range("H6").Activate          'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
    With Selection.Interior       
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535            'залили желтым цветом, нажав на кнопку заливки на верхней панели
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Почему макрос записался таким неэффективным образом? Потому что в каждый момент времени (в каждой строке) программа не знает, что вы будете делать дальше. Поэтому в записи выбор ячеек и действия с ними — это два отдельных действия. Этот код лучше всего оптимизировать (особенно если вы хотите скопировать его внутрь какого-нибудь цикла, который должен будет исполняться много раз и перебирать много объектов). Например, так:

Sub Macro11()
'
' Macro1 Macro
    Range("F4:F10,H6:H10").Select '1. смотрим, что за объект выбран (что идёт до .Select)
    Range("H6").Activate
    With Selection.Interior       '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub



Sub Optimized_Macro()
    With Range("F4:F10,H6:H10").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:H10").Interior
        .Pattern = xlSolid               '4. полностью копируем всё, что было записано рекордером внутрь блока with
        .PatternColorIndex = xlAutomatic
        .Color = 55555                   '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Пример сценария, когда использование Select и Activate оправдано:

Допустим, мы хотим, чтобы во время исполнения программы мы одновременно изменяли несколько листов одним действием и пользователь видел какой-то определённый лист. Это можно сделать примерно так:

Sub Select_Activate_is_OK()
Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа

'Допустим, что тут мы решили покрасить те же два диапазона:
Range("F4:F10,H6:H10").Select
    Range("H6").Activate
    With Selection.Interior       
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

End Sub

Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.

Получение и изменение значений ячеек

Значение ячеек можно получать/изменять с помощью свойства value. 

'Если нужно прочитать / записать значение ячейки, то используется свойство Value
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1  'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"

'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство .text:
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1" 
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text

'Когда проявится разница:
'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text  'запишет как "31 декабря 2021 г."

Ячейки открытой книги

К ячейкам можно обращаться:

'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value        'По номерам строки и столбца
ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value      'По номерам строки и букве столбца
ThisWorkbook.Sheets("Sheet1").Range("A1").Value       'По адресу - вариант 1
ThisWorkbook.Sheets("Sheet1").[A1].Value              'По адресу - вариант 2
ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)

'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value                'По номерам строки и букве столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value                 'По адресу - вариант 1
Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value                        'По адресу - вариант 2
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value           'По имени ячейки (для этого ей предварительно нужно его присвоить)

Ячейки закрытой книги

Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.

Workbooks.Open Filename:="С:closed_workbook.xlsx"    'открыть книгу (она становится активной)
a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value  'достать значение ячейки 1,1
ActiveWorkbook.Close False                            'закрыть книгу (False => без сохранения)

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

Код из файла:

Option Explicit
Sub get_value_from_closed_wb() 'достать значение из закрытой книги
Dim a, wb_path, wsh As String
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
Workbooks.Open Filename:=wb_path
a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
ActiveWorkbook.Close False
ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
End Sub

Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
Dim wb_path, b, wsh As String
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
Workbooks.Open Filename:=wb_path
ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
ActiveWorkbook.Close True
End Sub

Перебор ячеек

Перебор в произвольном диапазоне

Скачать файл со всеми примерами

Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:

  1. Цикл For Each. Пример:
    Sub iterate_over_cells()
    
    For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells
    MsgBox (c)
    Next c
    
    End Sub​

    Этот цикл выведет в виде сообщений значения ячеек в диапазоне B2:D4 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т.д.).

  2. Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
    Sub iterate_over_cells()
    
    Dim cl, rw As Integer
    Dim x As Variant
    
    'перебор области 3x3
    For rw = 1 To 3 ' цикл для перебора рядов 1-3
    
        For cl = 1 To 3 'цикл для перебора столбцов 1-3
            x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value
            MsgBox (x)
        Next cl
    Next rw
    
    
    
    'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange
    'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
    'For rw = 1 To LastRow 'цикл перебора всех рядов
    '    For cl = 1 To LastCol 'цикл для перебора всех столбцов
    '        Действия 
    '    Next cl
    'Next rw
    
    
    End Sub​
  3. Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
    Sub iterate_cell_by_cell_over_selection()
        Dim ActSheet As Worksheet
        Dim SelRange As Range
        Dim cell As Range
        
     
        Set ActSheet = ActiveSheet
        Set SelRange = Selection
        
        'if we want to do it in every cell of the selected range
        For Each cell In Selection
        MsgBox (cell.Value)
        
        Next cell
    
    End Sub​

    Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.

  4. Перебор ячеек в ряду
    Sub iterate_cells_in_row()
        Dim i, RowNum, StartCell As Long
        
        RowNum = 3 'какой ряд
        StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i)
        
        For i = 1 To 10 ' 10 ячеек в выбранном ряду
        ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении
        Next i
    
    End Sub
  5. Перебор ячеек в столбце
    Sub iterate_cells_in_column()
        Dim i, ColNum, StartCell As Long
        
        ColNum = 3 'какой столбец
        StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i)
        
        For i = 1 To 10 ' 10 ячеек
        ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении
        Next i
    
    End Sub​

Свойства и методы ячеек

Имя ячейки

Присвоить новое имя можно так:

Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"

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

ActiveWorkbook.Names("Старое_Имя").Delete

Пример кода для переименования ячеек:

Sub rename_cell()

old_name = "Cell_Old_Name"
new_name = "Cell_New_Name"

ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub

Sub rename_cell_reverse()

old_name = "Cell_New_Name"
new_name = "Cell_Old_Name"

ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub

Адрес ячейки

Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
  '$A$1 style
  txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
  MsgBox (txt_address)
End Sub

Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
  'R1C1 style
  txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
  MsgBox (txt_address)
End Sub

  'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса 
  '(1- тип $A$1 2- R1C1 - номер ряда, столбца)
Function get_cell_address_by_name(str As String, address_type As Integer)
  '$A$1 style
  Select Case address_type
    Case 1
      txt_address = Range(str).Address
    Case 2
      txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
    Case Else
      txt_address = "Wrong address type selected. 1,2 available"
    End Select
  get_cell_address_by_name = txt_address
End Function

'перед запуском нужно убедиться, что в книге есть диапазон с названием, 
'адрес которого мы хотим получить, иначе будет ошибка
Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
  x = get_cell_address_by_name("MyValue", 2)
  MsgBox (x)
End Sub

Размеры ячейки

Ширина и длина ячейки в VBA меняется, например, так:

Sub change_size()
Dim x, y As Integer
Dim w, h As Double

'получить координаты целевой ячейки
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value

'получить желаемую ширину и высоту ячейки
w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
h = ThisWorkbook.Sheets("Sheet1").Cells(7, 2).Value

'сменить высоту и ширину ячейки с координатами x,y
ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w


End Sub

Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта). 

Sub get_size()
Dim x, y As Integer
'получить координаты ячейки, с которой мы будем работать
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value

'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight

'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height

End Sub

Скачать файл с примерами изменения и чтения размера ячеек

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

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

3 важных момента, чтобы это работало:

1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)

2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).

Скачать файл с базовым примером (как на картинке)

Скачать файл с расширенным примером (код ниже)

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        ' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
          '1. количество выделенных ячеек и 
          '2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
        ' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций

    If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки


    'вариант модификации - брать адрес ячейки из другой ячейки:
    'Dim CellName as String
    'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
    'If Not Intersect(Range(CellName), Target) Is Nothing Then
    'для работы этой модификации следующую строку надо закомментировать/удалить



        If Not Intersect(Range("D4"), Target) Is Nothing Then 
        'если заданный (D4) и выбранный диапазон пересекаются 
        '(пересечение диапазонов НЕ равно Nothing)

        'можно прописать диапазон из нескольких ячеек:
        'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
        'можно прописать несколько диапазонов:
        'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then

            Call program 'выполняем программу
        End If
    End If
End Sub

Sub program()

MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки


End Sub

VBA Value

VBA Value

The journey of VBA starts with knowing how the values get stored in the cells. Therefore, knowing VALUE function under VBA is of more importance. After studying about VBA VALUE property, you will be able to know how the values get stored under VBA. This article explains all the types of VALUE function in VBA like how the value gets stored in cells, hot to set the value, how to insert the value and many more.

How to Use Excel VBA Value Function?

We will learn how to use VBA Value function with few examples in Excel.

You can download this VBA Value Excel Template here – VBA Value Excel Template

Example #1 – Set Cell Value using Range.Value function

Setting of cell/s value using Range. Value function roughly consists of two important steps:

  • Setting the range where you want the value to be stored.
  • Assigning a value to the range set.

Follow the below steps to set value in Excel VBA:

Step 1: Insert a new module under Visual Basic Editor (VBE).

vba value module

Step 2: Define a new sub-procedure under the inserted module so that a macro can be stored in it.

Code:

Sub VBA_Value_Ex1()

End Sub

vba value Example 1

Step 3: Define a new variable as a range which can be used to define a range where you wanted to store the value.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range

End Sub

vba value Example 1.1

Step 4: With the help of the VBA RANGE function, assign the cells in the range to a variable defined with the help of the assignment operator.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1")

End Sub

vba value Example 1.2

Step 5: Now, use Range.Value property to be able to assign value to the range defined. Type the variable name “setValue_Var” under which the range is defined.

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1")
setValue_Var

End Sub

vba value Example 1.3

Step 6: Put a dot (.) after variable to be able to select the IntelliSense list of functions available for this range variable defined.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1")
setValue_Var.

End Sub

vba value Example 1.4

Step 7: Drag down through the list and select “Value” function to store the value under this range variable.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1")
setValue_Var.Value

End Sub

vba value Example 1.5

Step 8: Assign “Welcome to the world of VBA!” as value to this range using assignment operator.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1")
setValue_Var.Value = "Welcome to the world of VBA!"

End Sub

vba value Example 1.6

Step 9: We are done with the coding part. Run this code by hitting F5 or Run button under VBE and see the output.

vba value 1

You also can assign the value to a range of cells. All you have to do is while setting the range for the output you will give one-dimensional array instead of a single cell reference.

Step 10: In the same code above, change the Range from “A1” to “A1: A5”.

Code:

Sub VBA_Value_Ex1()

Dim setValue_Var As Range
Set setValue_Var = ThisWorkbook.Worksheets("Setting_Cell_Value_1").Range("A1:A5")
setValue_Var.Value = "Welcome to the world of VBA!"

End Sub

vba value Example 1.7

Step 11: Hit F5 or Run button and see the output.

vba value Example 1.8

Example #2 – Set Cell Value using VBA Cells Property

This is another method for setting the cell value under VBA. Unlike the RANGE function, cells do not even need them. Value operator to be able to set value for the specific cell/s.

Follow the below steps to set the cell value in Excel VBA:

Step 1: Insert a new module under VBE where you can start writing your new piece of code.

New Module

Step 2: Add new sub-procedure under module inserted, where you can store your macro code in.

Code:

Sub VBA_Value_Ex2()

End Sub

vba example 2

Step 3: Start typing thisWorkbook.Worksheet to access the sheet named “Setting_Cell_Value_2”.

Code:

Sub VBA_Value_Ex2 ()

ThisWorkbook.worksheets

End Sub

vba example 2.2

Step 4: Mention the sheet name under parentheses in double quotes.

Code:

Sub VBA_Value_Ex2()

ThisWorkbook.Worksheets ("Setting_Cell_Value_2")

End Sub

vba example 2.1

Step 5: Use .Cells property to set the cell range from the given excel sheet.

Code:

Sub VBA_Value_Ex2()

ThisWorkbook.Worksheets("Setting_Cell_Value_2").Cells(1, 1)

End Sub

vba example 2.6

The first argument of the Cells property represents the rows and the second argument represents the column. Therefore, Cells(1, 1) means cell associated with the first row and first column of the sheet “Setting_Cell_Value_2”.

Step 6: Now, with the help of the assignment operator, assign a value to this cell set.

Code:

Sub VBA_Value_Ex2()

ThisWorkbook.Worksheets("Setting_Cell_Value_2").Cells(1, 1) = "VBA is Flexible."

End Sub

vba example 2.5

Have a look that we don’t need .Value function which we need to use while setting the value using Range function. Cells Method does not have such IntelliSense options.

Step 7: Hit F5 or Run button to run this code and see the output. You will see an output as shown in the screenshot below.

vba Value 2

Example #3 – Get Cell Value in VBA

Until now, in two examples we have seen how to set value for a cell or range of cells. Now suppose a case is exactly reverse, we have to get the value assigned to a particular cell of an excel sheet. How can we get that? Let’s go through a step by step guide.

Suppose I have assigned a value as shown in the screenshot below under the first cell of column A in sheet “Getting_Cell_Value”.

which programming language

Follow the below steps to get the cell value in Excel VBA:

Step 1: Insert a new module under VBE.

module long 3

Step 2: Add a sub-procedure so that a macro can be stored as a code.

Code:

Sub VBA_Value_Ex3()

End Sub

 Example 2.2

Step 3: Define a new variable called Get_Value as a Variant using VBA Dim function.

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant

End Sub

Example 2.3

Now, you have to assign the value present in cell A1 to the variable defined above.

Step 4: Type “Get_Value = ThisWorkbook.Worksheets”. This will allow the VBA compiler to access the excel sheet where your value is stored.

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant
Get_Value = ThisWorkbook.Worksheets

End Sub

Example 2.4

Step 5: Mention the worksheet name under parentheses with quotations in which value is stored.

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant
Get_Value = ThisWorkbook.Worksheets("Getting_Cell_Value")

End Sub

Example 2.5

Step 6: Now, use dot (.) Range method to provide the exact cell where value is stored under sheet named “Getting_Cell_Value”.

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant
Get_Value = ThisWorkbook.Worksheets("Getting_Cell_Value").Range("A1")

End Sub

Example 2.6

Step 7: Finally, use dot (.) Value method so that the actual value under cell A1 can be accessed by the compiler.

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant
Get_Value = ThisWorkbook.Worksheets("Getting_Cell_Value").Range("A1").Value

End Sub

Example 2.7

Step 8: As we have talked about, we need to get the value stored in cell A1. For that, use MsgBox to show the value of variable Get_Value (Which already have accessed the value typed in cell A1).

Code:

Sub VBA_Value_Ex3()

Dim Get_Value As Variant
Get_Value = ThisWorkbook.Worksheets("Getting_Cell_Value").Range("A1").Value
MsgBox Get_Value

End Sub

vba value Example 2.8

Step 9: Hit F5 or Run button to run this code, you will get the value present in cell A1 under the message box.

vba value 3 example

See, this was the value we have mentioned under cell A1 of sheet “Getting_Cell_Value”. Right?

Example #4 – Can we get Multiple Cell Values at a Time?

Let’s assume I have values stored in three different cells A1, A2, A3 as shown in the screenshot below:

vba value Example 3.1

Just don’t get confused if you see the text spread along columns A to E. it is just a visible layout (because I have merged the cells ) and the actual value is stored under cell A1, A2, A3 only.

Follow the below steps to use Excel VBA Value:

Step 1: Define a variable as a variant under a new sub-procedure in your VBA module.

Code:

Sub VBA_Value_Ex4()

Dim Get_Value_2 As Variant

End Sub

Add Variant

Step 2: Use Range.Value method to retrieve the value of cells A1: A3 and assign to a new variable defined in the previous step.

Code:

Sub VBA_Value_Ex4()

Dim Get_Value_2 As Variant
Get_Value_2 = ThisWorkbook.Worksheets("Getting_Cell_Value_2").Range("A1:A3").Value

End Sub

worksheet 3

Step 3: Finally, use the MsgBox function to display the values stored in cell A1: A3.

Code:

Sub VBA_Value_Ex4()

Dim Get_Value_2 As Variant
Get_Value_2 = ThisWorkbook.Worksheets("Getting_Cell_Value_2").Range("A1:A3").Value
MsgBox Get_Value_2

End Sub

work sheet cell value

Step 4: Hit F5 or Run button and see the output for this code.

vba value example 4

You’ll get a Run-time error’13’: Type Mismatch. The reason behind getting this error is, we are defining a single variable and assigning values of a one-dimensional array (with three rows) to it. Which is logically not possible.

This is from this article. Let’s wrap the things up with some points to be remembered.

Things to Remember

You can’t set multiple cells value while using the VBA CELLS method, because it takes rows and columns as arguments. You can only specify the row number and column number in it.

You also can’t get values stored in multiple cells in a single message box. If you have to retrieve the range of values, you need to write the separate get arguments for each of the value.

Recommended Articles

This has been a guide to VBA Value. Here we have discussed how to use Excel VBA Value Function along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA On Error
  2. VBA Number Format
  3. VBA VLOOKUP
  4. VBA Function

На чтение 18 мин. Просмотров 74.8k.

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 позволяют вам получить доступ к диапазону ячеек этих типов

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