Vba значение ячейки excel: VBA Excel. Ячейки (обращение, запись, чтение, очистка)
VBA Excel. Ячейки (обращение, запись, чтение, очистка)
Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5] |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
ActiveCell Range(«A1») Cells(1, 1) Cells(1, «A») [A1] |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка “A1”.
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
‘по основному имени листа Лист2.Cells(2, 7) ‘по имени ярлыка Sheets(«Имя ярлыка»). Cells(3, 8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.
Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(“A1:C3”):
Обращение к ячейке Range("A1:C3").Cells(5)
соответствует выражению Range("B2")
.
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого")
.
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
Cells(2, 4).Value = 15 Cells(2, 4) = 15 Range(«A1») = «Этот текст записываем в ячейку» ActiveCell = 28 + 10*36 |
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
Sub Test() Dim a1 As Integer, a2 As Integer, a3 As Integer Range(«A3») = 6 Cells(2, 5) = 15 a1 = Range(«A3») a2 = Cells(2, 5) a3 = a1 * a2 MsgBox a3 End Sub |
Точно также можно обмениваться информацией между ячейками:
Cells(2, 2) = Range(«A4») |
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:
Cells(10, 2). ClearContents Range(«D23») = 0 ActiveCell = «» |
VBA Excel. Ячейки (обращение, запись, чтение, очистка)
Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, 3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5, «C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).[C5] |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
ActiveCell Range(«A1») Cells(1, 1) Cells(1, «A») [A1] |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка “A1”.
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
‘по основному имени листа Лист2.Cells(2, 7) ‘по имени ярлыка Sheets(«Имя ярлыка»). Cells(3, 8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Обращение к ячейке по индексу
К ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз.
Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.
Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(“A1:C3”):
Обращение к ячейке Range("A1:C3").Cells(5)
соответствует выражению Range("B2")
.
Обращение к ячейке по имени
Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.
Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого")
.
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
Cells(2, 4).Value = 15 Cells(2, 4) = 15 Range(«A1») = «Этот текст записываем в ячейку» ActiveCell = 28 + 10*36 |
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
Sub Test() Dim a1 As Integer, a2 As Integer, a3 As Integer Range(«A3») = 6 Cells(2, 5) = 15 a1 = Range(«A3») a2 = Cells(2, 5) a3 = a1 * a2 MsgBox a3 End Sub |
Точно также можно обмениваться информацией между ячейками:
Cells(2, 2) = Range(«A4») |
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:
Cells(10, 2). ClearContents Range(«D23») = 0 ActiveCell = «» |
Excel vba записать значение в ячейку Excelka.ru
VBA-Урок 5. Свойства (Properties)
В данной статье мы будем учиться писать VBA код, чтобы управлять содержимым ячеек, самими ячейками и листами.
1. Запись значений в ячейку
Для начала откроем редактор, добавим модуль, скопируем туда этот макрос:
Мы обратились к ячейке A1 . Теперь давайте попробуем управлять данной ячейкой. Чтобы увидеть, что мы можем сделать, добавим точку после Range («A1»).
Выберите значение Value и нажмите Tab. Получим такой код:
Значение Value отображает содержимое ячейки.
Теперь давайте запишем значение 35 в ячейку A1:
Попробуем теперь записать текст в ячейку (когда присваиваем текстовое значение, его нужно брать в двойные кавычки «»):
Заметим, что макрос будет отображать значение в том листе, который вы последний раз открывали. Поэтому, чтобы управлять содержимым ячейки на любом листе книги, нам нужно будет прописать полный путь к ячейке, а именно добавить впереди кода название листа, например:
Вариант 1. Обращаемся по названию листа — Sheets(«Sheet2»).
Вариант 2. Обращаемся не по названию листа, а по его порядковому номеру — Sheets(2).
Аналогично, если мы хотим обратиться к ячейке в другой книге, нам нужно в начале кода прописать название книги:
Хотя мы указываем параметр Value в наших примерах, на самом деле его можно не использовать, поскольку он стоит по умолчанию. То есть, эти две строки кода будут эквивалентными:
2. Удаление значений
Удалим значение 35 из ячейки A1, которое мы записали в начале урока:
3. Форматирование значений
Если вы выберете значение Font , то появится список параметров, которые вы сможете применить к ячейке:
Форматирование: изменение размера текста
Давайте присвоим ячейке значение 35 и уменьшим размер шрифта до 8:
Работа с Excel — записать в ячейку значение из TextBox
Что еще можно почитать
Дозапись в файл на FTP (Декабрь 8, 2015)
Генератор QR-кода на VB . NET (Март 13, 2016)
Plazma — Black Bird Fly (Cover) (Сентябрь 2, 2015)
Magic Mystery (Systems In Blue Cover) (Март 30, 2016)
Получить имя компьютера по его IP-адресу (Декабрь 4, 2015)
13 комментариев: Работа с Excel — записать в ячейку значение из TextBox
Добрый вечер!
Как сделать, что б запись выполнялась в пустую строку таблицы excel т.е. программа ищет пустую стоку и в нее записывает значение?
@ Игорь:
Добрый.
Вам нужен UsedRange, можете загуглить.
Пример будет выглядеть так (строка 7):
@ Игорь:
Добрый.
Вам нужен UsedRange, можете загуглить.
БОЛЬШОЕ Спасибо! Сейчас попробую погуглить и разобраться!
Но я вот, что имел ввиду:
есть два поля textbox1 и textbox2, кнопка button1 «Записать». Необходимо при нажатии кнопки выполнить запись из textbox1 и textbox2 в таблицу excel (например файл 1. xlsx). Причем textbox1 в столбец «В», а textbox2 в столбец «С», но в свободную строку (не заполненную), например 1, 2, 3 строки заполнены, а 4 пустая — так вот в нее!
В cells второй параметр — это и есть индекс столбца. Там указана 1, т.е. первый столбец. Вы пишите нужный.
Что Вас смущает?
VBA Excel. Ячейки (обращение, запись, чтение, очистка)
Обращение к ячейке на листе Excel из кода VBA. Запись информации в ячейку. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.
Обращение к ячейке
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере — это ячейка «A1».
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках — имя ярлыка.
Кроме того к ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз. Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе — зависит от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее. Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.
Запись информации в ячейку
Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:
Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».
Чтение информации из ячейки
Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:
Точно также можно обмениваться информацией между ячейками:
Очистка значения ячейки
Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:
Чтение и запись значения ячейки в VBA
В приложении Excel все данные как правило находятся в ячейках на листах, с которыми макросы работают как с базой данных. Поэтому, начинающему программисту VBA важно понимать как читать значения из ячейки Excel в переменные или массивы и, наоборот, записывать какие-либо значения на лист в ячейки.
Обращение к конкретной ячейке
Прежде чем читать или записывать значение в ячейке, нужно определиться с тем, как можно указать какая именно ячейка нам необходима.
Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:
- С помощью Range
- С помощью Cells
Пример 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
Все три строки запишут в A1 одно и то же значение.
Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года
В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.
Визуальное отображение значения на экране будет зависеть от того, какой формат ячейки выбран на листе.
Запись значения в ячейку, которая не вызывает функцию, через функцию VBA
Мне интересно, можно ли записывать значения в ячейку в Excel через функцию VBA?
Аки ни строки в следующей функции будут называть:
Но следующим пустышки Sub будет работать правильно:
Есть ли что-то, что нужно сделать, чтобы быть в состоянии записать в ячейку, которая не является ячейкой, вызывающей конкретную функцию?
Создан 12 сен. 16 2016-09-12 05:33:09 Matt
Уже описано здесь, поиск этой ссылке: //stackoverflow. com/questions/9476282/cannot-vba-write-data-to-cells-in-excel-2007-2010-within-a-функция – Shai Rado 12 сен. 16 2016-09-12 05:37:14
может быть это временное решение может сделать для вас:
сократить вниз вашу OffsetValue функцию:
место следующие подвиды в кодовой области рабочего листа вы хотите использовать Function OffsetValue() в:
Если вы не хотите удалять звонок OffsetValue() из той ячейки, которую вы написали, а затем просто удалить/комментарий Target.ClearContents
это только базовый код, который вы можете улучшить с:
некоторые проверка Target диапазона, передаваемым в Worksheet_Change()
вы можете проверить, если он соответствует конкретным Значение (например: проверка Target.Value с некоторым диапазоном значений) или Диапазон (например: проверка Target сам диапазон, принадлежащий предопределенному Range ) критерии
обрабатывать ту же потребность на протяжении всей книги
, то вы должны переключиться на использование обработчика Sub ThisWorkbook_Change() событий в коде панели ThisWorkbook
Работа с активной ячейкой | Microsoft Docs
-
000Z» data-article-date-source=»ms.date»>06/08/2017 - Чтение занимает 2 мин
В этой статье
Свойство ActiveCell возвращает объект Range, представляющий активную ячейку.The ActiveCell property returns a Range object that represents the cell that is active. К активной ячейке можно применить любое свойство или метод объекта Range, как показано в следующем примере.You can apply any of the properties or methods of a Range object to the active cell, as in the following example. Хотя можно выделить одну или несколько ячеек листа, в выделенном фрагменте только к одной ячейке можно применить свойство ActiveCell.While one or more worksheet cells may be selected, only one of the cells in the selection can be the ActiveCell.
Sub SetValue()
Worksheets("Sheet1").Activate
ActiveCell.Value = 35
End Sub
Примечание. С активной ячейкой можно работать только в том случае, если лист, на котором она находится, является активным листом.Note You can work with the active cell only when the worksheet that it is on is the active sheet.
Перемещение активной ячейкиMoving the Active Cell
Чтобы указать, какая ячейка является активной, можно использовать метод Range .Activate.You can use the Range .Activate method to designate which cell is the active cell. Например, в следующей процедуре ячейка B5 назначается активной с последующим ее форматированием полужирным шрифтом.For example, the following procedure makes B5 the active cell and then formats it as bold.
Sub SetActive_MakeBold()
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range("B5").Activate
ActiveCell.Font.Bold = True
End Sub
Примечание. Чтобы выбрать диапазон ячеек, используйте метод Select.Note To select a range of cells, use the Select method. Чтобы сделать одну ячейку активной, используйте метод Activate.To make a single cell the active cell, use the Activate method.
Для перемещения активной ячейки можно использовать свойство Offset.You can use the Offset property to move the active cell. Следующая процедура вставляет текст в активную ячейку в выбранном диапазоне, а затем перемещает активную ячейку вправо на одну ячейку, не изменяя выделенный фрагмент.The following procedure inserts text into the active cell in the selected range and then moves the active cell one cell to the right without changing the selection.
Sub MoveActive()
Worksheets("Sheet1").Activate
Range("A1:D10").Select
ActiveCell.Value = "Monthly Totals"
ActiveCell.Offset(0, 1).Activate
End Sub
Выделение ячеек вокруг активной ячейкиSelecting the Cells Surrounding the Active Cell
Свойство CurrentRegion возвращает диапазон или «остров» ячеек, ограниченный пустыми строками и столбцами. The CurrentRegion property returns a range or ‘island’ of cells bounded by blank rows and columns. В следующем примере выделенный фрагмент расширяется для включения ячеек, содержащих данные, непосредственно примыкающие к активной ячейке.In the following example, the selection is expanded to include the cells that contain data immediately adjoining the active cell. Затем этот диапазон форматируется с использованием денежного стиля.This range is then formatted with the Currency style.
Sub Region()
Worksheets("Sheet1").Activate
ActiveCell.CurrentRegion.Select
Selection.Style = "Currency"
End Sub
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Проход по диапазону ячеек | Microsoft Docs
-
- Чтение занимает 2 мин
В этой статье
При использовании Visual Basic часто требуется выполнить один и тот же блок операторов в каждой ячейке диапазона.When using Visual Basic, you often need to run the same block of statements on each cell in a range of cells. Для этого необходимо объединить оператор цикла и один или несколько методов для идентификации каждой ячейки по отдельности и выполнить операцию.To do this, you combine a looping statement and one or more methods to identify each cell, one at a time, and run the operation.
Один из способов пройти по диапазону — использовать цикл For…Next со свойством Cells.One way to loop through a range is to use the For…Next loop with the Cells property. С помощью свойства Cells можно заменить номера индексов ячеек счетчиком циклов (или другими переменными или выражениями).Using the Cells property, you can substitute the loop counter (or other variables or expressions) for the cell index numbers. В следующем примере индекс строки заменяется переменной counter
.In the following example, the variable counter
is substituted for the row index. Процедура проходит по диапазону ячеек C1:C20, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.The procedure loops through the range C1:C20, setting to 0 (zero) any number whose absolute value is less than 0.01.
Sub RoundToZero1()
For Counter = 1 To 20
Set curCell = Worksheets("Sheet1"). Cells(Counter, 3)
If Abs(curCell.Value) < 0.01 Then curCell.Value = 0
Next Counter
End Sub
Еще один простой способ пройти по диапазону — использовать цикл For Each…Next с коллекцией ячеек, указанной в свойстве Range.Another easy way to loop through a range is to use a For Each…Next loop with the collection of cells specified in the Range property. Visual Basic автоматически присваивает объектную переменную для следующей ячейки при каждом выполнении цикла.Visual Basic automatically sets an object variable for the next cell each time the loop runs. Следующая процедура проходит по диапазону ячеек A1:D10, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.The following procedure loops through the range A1:D10, setting to 0 (zero) any number whose absolute value is less than 0.01.
Sub RoundToZero2()
For Each c In Worksheets("Sheet1").Range("A1:D10"). Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub
Если вы не знаете границы диапазона, по которому нужно пройти, можно использовать свойство CurrentRegion, чтобы возвратить диапазон, окружающий активную ячейку.If you do not know the boundaries of the range you want to loop through, you can use the CurrentRegion property to return the range that surrounds the active cell. Например, при запуске на листе следующая процедура выполняет проход по диапазону, окружающему активную ячейку, присваивая значение 0 (ноль) каждому числу, абсолютное значение которого меньше 0,01.For example, the following procedure, when run from a worksheet, loops through the range that surrounds the active cell, setting to 0 (zero) any number whose absolute value is less than 0.01.
Sub RoundToZero3()
For Each c In ActiveCell.CurrentRegion.Cells
If Abs(c.Value) < 0.01 Then c.Value = 0
Next
End Sub
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Копирование значения ячейки с сохранением форматирования из одной ячейки в другую в excel с помощью VBA
в excel я пытаюсь Скопировать текст из одной ячейки в другую ячейку на другом листе. Исходная ячейка содержит форматированный текст (жирный,подчеркнутый,разных цветов). Но когда я копирую текст с помощью VBA в другую ячейку, форматирование теряется.
Я знаю, что это потому, что Excel копирует только текстовое значение. Есть ли способ прочитать HTML-текста (вместо обычного текста) из ячейки?
я погуглил это и сделал никаких ответов. Я знаю, что если мы используем методы копирования и вставки, мы можем скопировать форматирование.
Е. Г.
Range("F10").Select
Selection.Copy
Range("I10").Select
ActiveSheet. Paste
но я хочу сделать это без копирования и вставки, так как мой пункт назначения-объединенная ячейка и не одинакового размера с моей исходной ячейкой. Есть ли опция, доступная в excel VBA для этого?
изменить:
Я смог решить ее с помощью следующего кода.
Range("I11").Value = Range("I10").Value
For i = 1 To Range("I10").Characters.Count
Range("I11").Characters(i, 1).Font.Bold = Range("I10").Characters(i, 1).Font.Bold
Range("I11").Characters(i, 1).Font.Color = Range("I10").Characters(i, 1).Font.Color
Range("I11").Characters(i, 1).Font.Italic = Range("I10").Characters(i, 1).Font.Italic
Range("I11").Characters(i, 1).Font.Underline = Range("I10").Characters(i, 1).Font.Underline
Range("I11").Characters(i, 1).Font.FontStyle = Range("I10").Characters(i, 1).Font.FontStyle
Next i
8
автор: BlackCursor
5 ответов
для копирования форматирования:
Range("F10"). Select
Selection.Copy
Range("I10:J10").Select ' note that we select the whole merged cell
Selection.PasteSpecial Paste:=xlPasteFormats
копирование форматирования нарушит объединенные ячейки, поэтому вы можете использовать это, чтобы собрать ячейку обратно
Range("I10:J10").Select
Selection.Merge
чтобы скопировать значение ячейки, не копируя ничего другого (и не используя copy/paste), вы можете обратиться к ячейкам напрямую
Range("I10").Value = Range("F10").Value
другие свойства (шрифт, цвет etc) также можно скопировать, обратившись к свойствам объекта диапазона непосредственно таким же образом
Использование Excel 2010 ? Попробуй!—2—>
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Я предпочитаю избегать использования select
With sheets("sheetname"). range("I10")
.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
.PasteSpecial Paste:=xlPasteFormats, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
.font.color = sheets("sheetname").range("F10").font.color
End With
sheets("sheetname").range("I10:J10").merge
Sub CopyValueWithFormatting()
Sheet1.Range("A1").Copy
With Sheet2.Range("B1")
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
End With
End Sub
1
автор: Ankush agarwal
копирование жирного текста с одного листа на другой лист в excel с помощью VBScript
‘Создать объект экземпляра
Set oXL = CreateObject("Excel. application")
oXL.Visible = True
Set oWB = oXL.Workbooks.Open("FilePath.xlsx")
Set oSheet = oWB.Worksheets("Sheet1") 'Source Sheet in workbook
Set oDestSheet = oWB.Worksheets("Sheet2") 'Destination sheet in workbook
r = oSheet.usedrange.rows.Count
c = oSheet.usedrange.columns.Count
For i = 1 To r
For j = 1 To c
If oSheet.Cells(i,j).font.Bold = True Then
oSheet.cells(i,j).copy
oDestSheet.Cells(i,j).pastespecial
End If
Next
Next
oWB.Close
oXL.Quit
0
автор: Ashok Kumar Ammineni
Ячейки и диапазоны Excel — код VBA
Код VBA
Нет объекта ячейки
Нет ни объекта ячейки, ни коллекции ячеек.
Отдельные ячейки обрабатываются как объекты диапазона, относящиеся к одной ячейке.
Содержимое ячейки
Самый простой способ узнать содержимое ячейки — использовать функцию Visual Basic TypeName
Range («A1»). Значение = 100
Range («B1»). Значение = VBA.TypeName (Range ("A1"). Value) = "Double"Range ("A2").Значение = # 1/1/2006 #
Диапазон
Диапазон ("B2"). Значение = VBA.TypeName (Диапазон ("A2"). Значение) = "Дата"("A3"). Значение = "некоторый текст «
Диапазон (« B3 »). Value = VBA.TypeName (Range (« A3 »). Value) =« String »Range (« A4 »). Formula =« = A1 »
Range (« B4 ») .Value = VBA.TypeName (Range ("A4"). Value) = "Double"
Текстовое свойство
Вы можете присвоить значение ячейке, используя ее свойство Value.
Вы можете присвоить ячейке числовой формат, используя ее свойство NumberFormat.
Свойство Text ячейки возвращает форматированный вид содержимого ячейки.
Диапазон ("A1"). Text = "$ 12,345.00"
Объект диапазона
Объект диапазона может состоять из отдельных ячеек или групп ячеек.
Даже вся строка или столбец считается диапазоном.
Хотя Excel может работать с трехмерными формулами, объект Range в VBA ограничен диапазоном ячеек на одном листе.
Можно редактировать диапазон либо напрямую с помощью объекта Range (например,грамм. Range («A1»). BackColor) или с помощью методов ActiveCell или Selection (например, ActiveCell.BackColor)
Свойство ячеек
Application.Cells
ActiveSheet.Cells
ActiveCell
Cells
При применении свойства ячеек объекту Range возвращается тот же объект.
Тем не менее, у него есть несколько применений:
Range.Cells.Count — общее количество ячеек в диапазоне.
Range.Cells (строка , столбец ) — для ссылки на определенную ячейку в диапазоне.
ActiveSheet.Cells (2,2) = ActiveSheet.Range ("B2")
Для irow = от 1 до 4
Для icolumn = от 1 до 4
ActiveSheet.Cells (irow, icolumn) .Value = 10
Next icolumn
Next irow
Dim objRange As Range
Установить objRange = ActiveSheet.Range (ActiveSheet.Cells (1,4), ActiveSheet.Cells (2,6))
Ячейки автоматически ссылаются на активный рабочий лист.
Если вы хотите получить доступ к ячейкам на другом листе, правильный код:
Диапазон (Рабочие листы (n).Cells (""), Worksheets (n) .Cells (""))
Свойство диапазона
Application.Range
ActiveSheet.Range
Range
Если диапазон не имеет префикса и не используется в модуле рабочего листа, тогда он относится к этому конкретному листу, а не к активному листу.
Свойство Selection
Selection вернет диапазон ячеек
Имейте в виду, что Selection не будет ссылаться на объект Range, если в данный момент выбран другой тип объекта, такой как диаграмма или фигура.
Использование объекта Selection выполняет операцию с текущими выбранными ячейками.
Если диапазон ячеек не был выбран до этой команды, то используется активная ячейка.
Selection.Resize (4,4) .Select
Всегда стоит проверить, что выбрано в данный момент, прежде чем использовать свойство Selection.
If TypeName (Selection) = "Range" Then
End If
Relative References
Важно помнить, что когда свойство Cells или свойство Range применяется к объекту Range, все ссылки относятся к левый верхний угол этого диапазона.
ActiveSheet.Range ("B2: D4"). Ячейки (2,2) = ActiveSheet.Range ("C3")
ActiveSheet.Range ("B2: D4"). Range ("B2") = ActiveSheet.Range («C3»)
ActiveCell возвращает ссылку на текущую активную ячейку
Это всегда возвращает только одну ячейку, даже если выбран диапазон ячеек.
Активная ячейка всегда будет одной из угловых ячеек диапазона ячеек. — а что если использовать клавиатуру ??
Общее количество заполненных ячеек
iTotal = Application.CountA (ActiveSheet.Cells)
Только объект окна
Это свойство применяется только к объекту окна
Это введет значение 12 в диапазон, который был выбран до того, как был выбран объект вне диапазона.
ActiveWindow.RangeSelection.Value = 12
Свойство Window.RangeSelection доступно только для чтения и возвращает объект Range, который представляет выбранные ячейки на листе в активном окне.
Если графический объект активен или выбран, то возвращается диапазон ячеек, который был выбран до выбора графического объекта.
Подсчет
Dim ltotal As Long
ltotal = Cells.Count 'возвращает длинныйDim dbtotal As Double
dbtotal = Cells.CountLarge' возвращает двойное значение
Диапазон диапазона
обрабатывать диапазон, как если бы это была верхняя левая ячейка на листе.
Может использоваться для возврата ссылки на верхнюю левую ячейку объекта Range.
Следующая строка кода выберет ячейку «C3».
Диапазон («B2»).Диапазон («B2»). Выберите
Диапазон («B2»). Ячейки (2). Выберите
. Помните, что ячейки нумеруются, начиная с A1 и продолжаясь до конца строки, прежде чем перейти к началу следующий ряд.
Диапазон ("B2"). Ячейки (2,2). Выберите
Альтернативой этому является использование смещения, которое более интуитивно понятно.
Range.Address
Метод Address возвращает адрес диапазона в виде строки.
Диапазон ("A1: B3").Address = "$ A $ 1: $ B $ 3"
Использование параметров позволяет управлять преобразованием в строку (абсолютное или относительное).
Range.Address ([RowAbsolute],
[ColumnAbsolute],
[ReferenceStyle],
[External],
[RelativeTo]) как строка
RowAbsolute — Истина или Ложь, по умолчанию True
ColumnAbsolute — True или False, по умолчанию — True
ReferenceStyle — xlReferenceStyle.xlA1
External — Истина для возврата внешней ссылки, по умолчанию — ложь
RelativeTo — Диапазон, представляющий относительно ячейки. Уместно только если ReferenceStyle = xlR1C1
Range.AddressLocal
Это похоже на Address, но возвращает адрес в региональном формате языка конкретной страны.
Cells.Replace SearchFormat: = True, ReplaceFormat: = True
lLastRowNo = ActiveCell.End (xlDown) .Row
Быстрое перемещение больших объемов данных
Dim vArray As VariantvArray = Range ("A1").Resize (10,10)
Range ("H6"). Resize (10,10) = vArray
Получение ссылки на активную ячейку
Dim lrownumber As Long
Dim icolumnno As Integerlrownumber = ActiveCell .Row
icolumnno = ActiveCell.Column
Вызов MsgBox ("Текущая активная ячейка -" & lrowno & "," & icolumnno)
Делает активную ячейку левой верхней ячейкой окна
ActiveCell.Select
ActiveWindow.ScrollColumn = ActiveCell.Column
ActiveWindow.ScrollRow = ActiveCell.Row
Selection
Selection.PasteSpecial Paste: = xlValues
Selection.Copy
Selection.Cut
Установить objRange =
000
S Selection. Цикл по всем выбранным ячейкамFor Each objCell In Selection.CellsNext objCell
Диапазон выбранных ячеек
ifirstcol = Range (Selection.Адрес) .Column
inoofcols = Range (Selection.Address) .Column + Selection.Columns.Count
lfirstrow = Range (Selection.Address) .Row
lnoofrows = Range (Selection.Address) .Row + Selection.Rows.Count
Selection.Font.Size = 12
Если TypeName (Selection) = "Range", то MsgBox ("В настоящий момент выбрано более одной ячейки")
Форматирование
Вызов MsgBox (Range ("A3"). Font.ColorIndex)
Вызов MsgBox (Range ("A3"). Interior.ColorIndex)
If (Range ("A3").Font.ColorIndex <0) Затем вызовите MsgBox ("When?")
If (Range ("A3"). Interior.ColorIndex <0) Затем вызовите MsgBox ("When?")
Range ("A2"). Font. Полужирный шрифт = True
Range ("A4: D10"). NumberFormat = "mmm-dd-yyyy"
Цикл по ячейкам
Dim rgeCell As Cellдля каждого диапазона rgeCell In ("A1: D30").
rgeCell.Value = 20
Next rgeCell
Dim rgeCurrent As RangeDo while Not IsEmpty (rgeCurrent)
'do something
Set rgeCurrent = rgeCurrent.Смещение (1,0)
Цикл
Вы можете запретить пользователю прокручивать рабочий лист, указав область прокрутки. Рабочие листы («Лист1»). ScrollArea = «A1: D400». Чтобы вернуть обычную прокрутку, просто назначьте ScrollArea пустой строке. Обратите внимание, что этот параметр не сохраняется, поэтому может потребоваться включить его в процедуру события WorkBook_Open ().
Вы можете быстро назначить диапазон ячеек Excel массиву и наоборот. Имейте в виду, что эти массивы будут начинаться с 1, а не с 0.vArrayName = Диапазон (---). Значение.Определение типа данных ячейки
Помогите определить тип данных, содержащихся в ячейке.
Принимает диапазон любого размера, но работает только с верхней левой ячейкой диапазона.Функция CellType (Rng)
'Возвращает тип ячейки верхней левой ячейки
' в диапазоне
Application.Volatile
Set Rng = Rng.Range ("A1")
Select Case True
Case IsEmpty (Rng): CellType = "Blank"
Case Application.IsText (Rng): CellType = "Text"
Case Application.IsLogical (Rng): CellType = "Logical"
Case Application.IsErr (Rng): CellType = "Error"
Case IsDate (Rng): CellType = "Date"
Case InStr (1, Rng.Text, ":") <> 0: CellType = "Time"
Case IsNumeric (Rng): CellType = "Value"
End Select
End Function
Определение того, является ли диапазон содержится в другом диапазоне
Функция InRange (rng1, rng2) As Boolean
'Возвращает True, если rng1 является подмножеством rng2
InRange = False
Если rng1.Parent.Parent.Name = rng2.Parent.Parent.Name Then
If rng1.Parent.Name = rng2.Parent.Name Then
If Union (rng1, rng2) .Address = rng2.Address Then
InRange = True
End If
End If
End If
End Function
© 2020 Better Solutions Limited. Все права защищены. © 2020 Better Solutions Limited TopPrevNext
Объект диапазона Excel VBA - Макросы Easy Excel
Примеры диапазонов | Клетки | Объявить объект диапазона | Выбрать | Ряды | Колонны | Копировать / Вставить | Очистить | Подсчитать
Объект Range , который является представлением ячейки (или ячеек) на вашем листе, является наиболее важным объектом Excel VBA .В этой главе дается обзор свойств и методов объекта Range. Свойства - это то, что есть у объекта (они описывают объект), тогда как методы что-то делают (они выполняют действие с объектом).
Примеры диапазонов
Поместите командную кнопку на свой лист и добавьте следующую строку кода:
Диапазон ("B3"). Значение = 2
Результат при нажатии кнопки команды на листе:
Код:
Диапазон ("A1: A4").Значение = 5
результат:
Код:
Диапазон ("A1: A2, B3: C4"). Значение = 10
результат:
Примечание: чтобы ссылаться на именованный диапазон в коде Excel VBA, используйте такую строку кода:
Диапазон ("Цены"). Значение = 15
Ячейки
Вместо Range вы также можете использовать Cells. Использование ячеек особенно полезно, когда вы хотите перебирать диапазоны.
Код:
Ячейки (3, 2).Значение = 2
результат:
Объяснение: Excel VBA вводит значение 2 в ячейку на пересечении строки 3 и столбца 2.
Код:
Диапазон (Ячейки (1, 1), Ячейки (4, 1)). Значение = 5
результат:
Объявить объект диапазона
Вы можете объявить объект Range с помощью ключевых слов Dim и Set.
Код:
Пример Dim As Range
Set example = Range ("A1: C4") Пример.Значение = 8
результат:
Выбрать
Важным методом объекта Range является метод Select. Метод Select просто выбирает диапазон.
Код:
Пример Dim As Range
Set example = Range ("A1: C4") Пример. Выберите
результат:
Примечание: чтобы выбрать ячейки на другом листе, сначала необходимо активировать этот лист. Например, следующие строки кода выбирают ячейку B7 на третьем листе слева.
Рабочие листы (3). Активировать
Рабочие листы (3). Диапазон ("B7"). Выберитерядов
Свойство Rows предоставляет доступ к определенной строке диапазона.
Код:
Пример Dim As Range
Установить пример = Range ("A1: C4") Пример. Ряды (3). Выберите
результат:
Примечание: рамка только для иллюстрации.
Колонны
Свойство Columns предоставляет доступ к определенному столбцу диапазона.
Код:
Dim example As Range
Set example = Range ("A1: C4")example.Columns (2). Select
результат:
Примечание: рамка только для иллюстрации.
Копировать / Вставить
Методы копирования и вставки используются для копирования диапазона и вставки его в другое место на листе.
Код:
Диапазон ("A1: A2"). Выберите
.
Selection.CopyRange ("C3"). Выберите
ActiveSheet.Pasteрезультат:
Хотя это разрешено в Excel VBA, гораздо лучше использовать приведенную ниже строку кода, которая делает то же самое.
Диапазон ("C3: C4"). Значение = Диапазон ("A1: A2"). Значение
прозрачный
Для очистки содержимого диапазона Excel можно использовать метод ClearContents.
Диапазон ("A1"). ClearContents
или просто используйте:
Диапазон ("A1"). Значение = ""
Примечание: используйте метод Clear для очистки содержимого и формата диапазона. Используйте метод ClearFormats только для очистки формата.
Граф
С помощью свойства Count вы можете подсчитать количество ячеек, строк и столбцов в диапазоне.
Примечание: рамка только для иллюстрации.
Код:
Пример Dim As Range
Установить пример = Range ("A1: C4")Пример MsgBox.Count
результат:
Код:
Dim example As Range
Set example = Range ("A1: C4")MsgBox example.Rows.Count
результат:
Примечание: аналогичным образом вы можете подсчитать количество столбцов диапазона.
Когда вы работаете в Excel, либо Например, как вы знаете, даты хранятся как Значения ячеек в формулах Давайте рассмотрим этот пример дальше. В камере Вряд ли вы будете жестко кодировать даты вроде Вы можете использовать ТЕКСТ Различие между значением и текстом Если не учитывать различия Значения ячеек в VBA Когда вы пишете код на VBA, вы можете использовать текст Диапазон ("C1"). Значение = 0,49999999 Вам понадобится окно Immediate VBA Текст Следует также отметить, что пока ячейка может содержать до 32К |
VBA- 11.2. (События рабочего листа)
, г. .
Worksheet_SelectionChange ()
`` Рабочий лист :
SelectionChange .:
Private Sub Worksheet_SelectionChange (цель ByVal как диапазон) Конец подписки
,,:
Private Sub Worksheet_SelectionChange (цель ByVal как диапазон) Статический previous_selection как строка Если previous_selection "" Тогда 'Удаление цвета фона из предыдущего выбора: Диапазон (предыдущий_выбор) .Interior.ColorIndex = xlColorIndexNone Конец, если 'Добавление цвета фона к текущему выделению: Target.Интерьер.Color = RGB (181, 244, 0) 'Сохранение адреса текущего выделения: previous_selection = Целевой адрес. Конец подписки
Рабочий лист_Активировать ()
Личный вспомогательный лист_активировать () Конец подписки
Рабочий лист_ Деактивировать ()
Личный вспомогательный лист_Deactivate () Конец подписки
Worksheet_BeforeDoubleClick ()
:
Private Sub Worksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean) Конец подписки
Worksheet_BeforeRightClick ()
Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Отменить как Boolean) Конец подписки
Рабочий лист_вычислить ()
,
Private Sub Worksheet_Calculate () Конец подписки
Рабочий лист_Изменение ()
,:
Private Sub Worksheet_Change (значение ByVal как диапазон) Конец подписки
Worksheet_FollowHyperlink ()
()
Private Sub Worksheet_FollowHyperlink (ByVal Target как гиперссылка) Конец подписки
Временно отключить все события ()
-,:
Заявка.