Vba Excel Задать Диапазон Range Через Переменные • Метод autofilter

Чтение и запись значения ячейки в VBA

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

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

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

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

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Чтение значения из ячейки

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

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

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

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Чтение и запись значения ячейки в VBA
Следующий код отображает два окна сообщения: первое с заголовком — «Системн_информ» — содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком — «Системная информация» — содержит сообщение об используемой ширине экрана.
[expert_bq id=»1570″]Вычислим площадь прямоугольника, получив значения от пользователя во время выполнения с помощью двух полей ввода один для длины и один для ширины. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Sub CopyRange3()
Dim Rngl As Range, Rng2 As Range
Set Rngl = Workbooks( » File1.xlsx » ).Sheets( » Лист1 » ).Range( » A1 » )
Set Rng2 = Workbooks( » File2.xlsx » ).Sheets( » Лист2 » ).Range( » A1 » )
Rngl.Copy Rng2 End Sub

Электронный учебник — Событие листа

Усложним пример. Сделаем так, как показано в начале урока на левом рисунке. Попробуем Установить галочки, причём не во всём столбце, а в некотором диапазоне, например В2:В8. Ниже приведён макрос, который может это осуществить.

Переменные и константы в VBA - ОфисГуру
Работать с диапазоном в переменной можно точно также, как и с диапазоном на рабочем листе. Все свойства и методы объекта Range действительны и для диапазона, присвоенного переменной. При обращении к ячейке без указания свойства по умолчанию возвращается ее значение. Строки
[expert_bq id=»1570″]Важно если вы планируете работать только со значениями, используйте переменные массивов, код в них работает значительно быстрее. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).
Vba Excel Задать Диапазон Range Через Переменные • Метод autofilter

Пример Example

Следующий код отображает два окна сообщения: первое с заголовком — «Системн_информ» — содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком — «Системная информация» — содержит сообщение об используемой ширине экрана.
[expert_bq id=»1570″]Вручную эти величины устанавливаются на вкладке Вычисления Calculation диалогового окна Параметры Options , вызываемого командой Сервис, Параметры Tools, Options. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Пример 44. Разработать программу, которая по введенным переменным в соответствующие поля формы решает уравнение вида y = a*x^3 + 3b*sinx, находит неизвестную переменную х и выводит результат вычислений на рабочий лист Excel.

Задание групп строк и столбцов с помощью объекта Range

Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками.

Обращение к конкретной ячейке
АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные строковые переменные и строки со значком &, например:
[expert_bq id=»1570″]Если сообщение распространяется более чем на одну строку, то строки могут быть разделены с использованием символа возврата каретки Chr 13 или символа перевода строки Chr 10 между каждой строкой. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Свойства объектов, значения ячеек и значения переменных — все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.

Пример 2 – работа с форматами

Sub CopyRange3()
Dim Rngl As Range, Rng2 As Range
Set Rngl = Workbooks( » File1.xlsx » ).Sheets( » Лист1 » ).Range( » A1 » )
Set Rng2 = Workbooks( » File2.xlsx » ).Sheets( » Лист2 » ).Range( » A1 » )
Rngl.Copy Rng2 End Sub

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: