vba excel столбец по номеру

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

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

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

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

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

Источник

Ссылки на строки и столбцы

Используйте свойство Rows или свойство Columns для работы со всеми строками или столбцами. Эти свойства возвращают объект Range, который представляет диапазон ячеек. В следующем примере Rows(1) возвращает строку 1 на листе1. Затем свойство Bold объекта Font для диапазона настроено на True.

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

СправочникСмысл
Rows(1)Строка 1
RowsВсе строки на таблице
Columns(1)Столбец 1
Columns(«A»)Столбец 1
ColumnsВсе столбцы на таблице

Чтобы одновременно работать с несколькими строками или столбцами, создайте переменную объекта и используйте метод Union, объединяя несколько вызовов в свойство Rows или Columns. В следующем примере формат строк 1, 3 и 5 на таблице один в активной книге изменяется на жирный.

В этом примере удаляются пустые столбцы из выбранного диапазона.

Об участнике

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

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

Источник

Как обратиться к диапазону из VBA

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

Тоже самое можно сделать сразу для нескольких ячеек:

Если необходимо обратиться к именованному диапазону:

Cells(1, 1).Value = «Привет»

Синтаксис объекта Range:
Range(Cell1, Cell2)

Синтаксис объекта Cells:
Cells(Rowindex, Columnindex)

Исходя из этого несложно предположить, что к диапазону можно обратиться, используя Cells и Range:

‘выделяем диапазон «A1:B10» на активном листе Range(Cells(1,1), Cells(10,2)).Select

и для чего? Ведь можно гораздо короче:

Range(«D5:F56»).Offset(2, 1).Resize(1, 1).Select

И неплохо бы теперь понять, как значение диапазона присвоить переменной. Для начала переменная должна быть объявлена с типом Range. А т.к. Range относится к глобальному типу Object, то присвоение значения такой переменной должно быть обязательно с применением оператора Set:

Dim rR as Range Set rR = Range(«D5»)

если оператор Set не применять, то в лучшем случае получите ошибку, а в худшем(он возможен, если переменной rR не назначать тип) переменной будет назначено значение Null или значение ячейки по умолчанию. Почему это хуже? Потому что в таком случае код продолжит выполняться, но логика кода будет неверной, т.к. эта самая переменная будет содержать значение неверного типа и применение её в коде в дальнейшем все равно приведет к ошибке. Только ошибку эту отловить будет уже сложнее.
Использовать же такую переменную в дальнейшем можно так же, как и прямое обращение к диапазону:

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

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

‘так выглядит запись слова Test в ячейку А1 Range(«A1»).Select Selection.Value = «Test»

‘запишем слово Test в ячейку A1 на активном листе Range(«A1»).Value = «Test»

‘запишем слово Test в ячейку A1 на активном листе Range(«A1»).Value = «Test»

‘активируем Лист2 Worksheets(«Лист2»).Select ‘записываем слово Test в ячейку A1 Range(«A1»).Value = «Test»

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

‘запишем слово Test в ячейку A1 на Лист2 независимо от того, какой лист активен Worksheets(«Лист2»).Range(«A1»).Value = «Test»

‘считываем значение ячейки A1 с Лист2 независимо от того, какой лист активен MsgBox Worksheets(«Лист2»).Range(«A1»).Value

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

‘запишем слово Test в ячейку A1 на Лист2 книги Книга2.xlsx независимо от того, какая книга и какой лист активен Workbooks(«Книга2.xlsx»).Worksheets(«Лист2»).Range(«A1»).Value = «Test» ‘считываем значение ячейки A1 с Лист2 книги Книга3.xlsx независимо от того, какой лист активен MsgBox Workbooks(«Книга3.xlsx»).Worksheets(«Лист2»).Range(«A1»).Value

Dim wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets Range(«A1»).Value = wsSh.Name ‘записываем в ячейку А1 имя листа MsgBox Range(«A1»).Value ‘проверяем, то ли имя записалось Next wsSh

Dim wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets wsSh.Activate ‘активируем каждый лист Range(«A1»).Value = wsSh.Name ‘записываем в ячейку А1 имя листа MsgBox Range(«A1»).Value ‘проверяем, то ли имя записалось Next wsSh

Dim wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets wsSh.Range(«A1»).Value = wsSh.Name ‘записываем в ячейку А1 имя листа MsgBox wsSh.Range(«A1»).Value ‘проверяем, то ли имя записалось Next wsSh

Sheets(«Итог»).Range(Cells(1, 1), Cells(10, 1))

это вызовет ошибку «Run-time error ‘1004’: Application-defined or object-defined error». А ошибка появляется потому, что контейнер и объекты внутри него не могут располагаться на разных листах, равно как и:

Sheets(«Итог»).Range(Cells(1, 1), Sheets(«Итог»).Cells(10, 1)) ‘запись ниже так же неверна Range(Cells(1, 1), Sheets(«Итог»).Cells(10, 1))

Sheets(«Итог»).Range(Sheets(«Итог»).Cells(1, 1), Sheets(«Итог»).Cells(10, 1)) Range(Sheets(«Итог»).Cells(1, 1), Sheets(«Итог»).Cells(10, 1))

Разберем пример, приближенный к жизненной ситуации. Необходимо на лист Итог занести формулу вычитания, начиная с ячейки А2 и до последней заполненной. На момент записи активен Лист1. Очень часто начинающие записывают так:

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

lLastRow = Workbooks(«Книга3.xls»).Sheets(«Лист1»).Cells(Rows.Count, 1).End(xlUp).Row

lLastRow = Workbooks(«Книга3.xls»).Sheets(«Лист1»).Cells(Workbooks(«Книга3.xls»).Sheets(«Лист1»).Rows.Count, 1).End(xlUp).Row

или применить конструкцию With

Union(Range(«A1»), Range(«B10»)).Value = «Привет»

Однако существует и другой метод:

В чем отличие(я бы даже сказал преимущество) Union: можно применять в цикле по условию. Например, выделить в диапазоне A1:F50 только те ячейки, значение которых больше 10 и меньше 20:

Sub SelOne() Dim rCell As Range, rSel As Range For Each rCell In Range(«A1:F50») If rCell.Value > 10 And rCell.Value Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам

Доброго всем дня,коллеги! Подскажите чайнику простейшее.. Есть макрос,который вставляет в активную ячейку текущее время+текст. Необходимо,что бы текст возможно было вставить только в определенном диапазоне (н-р пару столбцов), т.к. при вставке «не туда» данные,записанные ранее удаляются,и откатиться назад уже нельзя. Буду благодарен за помощь! Девочек с наступающим.

Добрый день всем! В очередной раз за помощью! Простой макрос по кнопке вставляет дату + N дней. Но часто полученная дата попадает на выходной. Что нужно дописать,или изменить, что бы полученная дата «проскакивала» вперед на ближайший рабочий день?

Sub Через_10д()
If Not Intersect(ActiveCell, Range(«J14:M350»)) Is Nothing Then ActiveCell = Date + 10
End Sub

Артем,
1. Спасибо. Вообще в самом начале статьи написан другой код:

Range(«A1»).Value = «Привет»
Тоже самое можно сделать сразу для нескольких ячеек:
Range(«A1:C10»).Value = «Привет»

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

Dim arr ‘объявляем переменную, в которую помещать массив arr = Range(«A1:F10»).Value ‘дальше делаем с массивом все, что надо

Есть еще один забавный способ адресоваться в VBA к ячейке.
[a2] = «Привет!» ‘ Занесет в ячейку А2 текущей книги текущего листа «Привет!»
Работает при способе адресации А1. При адресации RC будет работать такой способ:
[r1c2] = «Привет!»

Подскажите, пожалуйста, можно ли так же обращаться к динамическим диапазонам, нижняя граница которых записана через ИНДЕКС(ПОИСКПОЗ. У меня всякие ошибки вылезают при попытке обращения к такому диапазону.

Матвей, можно. Но не зная как и что Вы там задаете и какие лезут ошибки помочь нечем 🙁 Попробуйте создать тему на форуме с приложенным файлом и подробным описанием проблемы.

Источник

VBA Excel. Свойство Cells объекта Range

Свойство Cells объекта Range в VBA Excel, представляющее коллекцию ячеек заданного диапазона. Обращение к ячейкам диапазона с помощью свойства Cells.

Свойство Cells объекта Worksheet

Обращение к ячейке «A1» активного рабочего листа с помощью свойства Cells:

В данном случае в качестве объекта Range выступает диапазон всего активного рабочего листа (ActiveSheet). Полный путь к ячейке «A1» можно записать так:

Обращение в VBA Excel к ячейке «C5» с помощью свойства Cells по имени рабочего листа (Worksheet) в другой книге Excel:

Обращение к диапазону «C5:G10» с помощью свойства Cells активного рабочего листа:

Свойство Cells объекта Range

Обращение в VBA Excel к ячейкам заданного диапазона с помощью свойства Cells рассмотрим на коллекции ячеек диапазона «C5:G10». Обращаться будем к ячейке «D8» активного листа:

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

Обход диапазона ячеек циклом

Обход ячеек циклом For Each… Next

Обход ячеек циклом For Each… Next — это самый простой способ обхода всех ячеек заданного диапазона. Он может быть применен, например, для присвоения ячейкам свойств и значений или поиска ячейки с определенным свойством или значением.

Присвоение ячейкам диапазона «B3:F10» числовых значений, соответствующих их порядковым номерам (индексам) в диапазоне:

Поиск в диапазоне «B3:F10», заполненном предыдущим кодом VBA Excel значениями, ячейки со значением «27», окрашивание ее в зеленый цвет и выход из цикла:

Обход диапазона циклом For… Next

Цикл For… Next позволяет указывать переменные в качестве индексов ячеек или номеров строк и столбцов для обхода ячеек заданного диапазона.

Присвоение ячейкам диапазона «B3:F10» числовых значений, соответствующих их порядковым номерам (индексам) в диапазоне, с помощью цикла For… Next:

Применение в качестве параметров свойства Cells объекта Range переменных, задающих номера строк и номера столбцов указанного диапазона при обходе его ячеек циклом For… Next:

Источник

Колонки VBA

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Свойство столбцов Excel VBA

Нам всем хорошо известен тот факт, что рабочая таблица Excel организована в столбцы и строки, и каждое пересечение строк и столбцов рассматривается как ячейка. Всякий раз, когда мы хотим сослаться на ячейку в Excel через VBA, мы можем использовать свойства Range или Cells. Что если мы хотим сослаться на столбцы из таблицы Excel? Есть ли какая-либо функция, которую мы можем использовать для ссылки на то же самое? Ответ большой ДА!

Да, в VBA есть свойство под названием «Столбцы», которое помогает вам ссылаться, а также возвращать столбец из данной таблицы Excel. Мы можем ссылаться на любой столбец на листе, используя это свойство, и можем манипулировать им.

Синтаксис столбцов VBA:

Синтаксис для свойства столбцов VBA показан ниже:

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Очевидно, какой столбец необходимо включить / использовать для дальнейшего разбирательства, используется этими двумя аргументами. Оба являются необязательными и, если они не предоставлены по умолчанию, будут рассматриваться как первая строка и первый столбец.

Как использовать свойство столбцов в Excel VBA?

Ниже приведены различные примеры использования свойства столбцов в Excel с использованием кода VBA.

Мы увидим, как можно выбрать столбец на листе, используя свойство VBA Columns. Для этого выполните следующие шаги:

Шаг 1: Вставьте новый модуль в Visual Basic Editor (VBE), где вы можете написать блок кодов. Нажмите на вкладку « Вставка » и выберите « Модуль» на панели VBA.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

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

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 3: Используйте свойство Columns.Select из VBA, чтобы выбрать первый столбец на рабочем листе. Это на самом деле по-разному, вы можете использовать Columns (1). Выберите изначально. Смотрите скриншот ниже:

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

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

Шаг 4: Нажмите F5 или нажмите кнопку «Выполнить», чтобы запустить этот код и увидеть результат. Вы можете видеть, что столбец 1 будет выбран в вашем листе Excel.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Это один из способов использования свойства столбцов для выбора столбца на листе. Мы также можем использовать имена столбцов вместо номеров столбцов в коде. Ниже код также дает тот же результат.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Если мы используем свойство Columns без какого-либо спецификатора, оно будет работать только на всех активных рабочих листах, присутствующих в рабочей книге. Однако, чтобы сделать код более безопасным, мы можем использовать спецификатор рабочего листа со столбцами и сделать наш код более безопасным. Следуйте инструкциям ниже:

Шаг 1: Определите новую подпроцедуру, которая может содержать макрос под модулем.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Теперь мы будем использовать свойство Worksheets.Columns для выбора столбца из указанного листа.

Шаг 2: Начните вводить квалификатор Worksheets под данным макросом. Этому классификатору нужно имя листа, укажите имя листа как « Пример 2 » (не забудьте добавить скобки). Это позволит системе получить доступ к рабочему листу с именем Пример 2 из текущей рабочей книги.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 3: Теперь используйте свойство Columns, которое позволит вам выполнять различные операции над столбцами на выбранном листе. Я выберу 4- й столбец. Я могу выбрать его, написав индекс как 4 или указав алфавит столбца «D».

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

На данный момент мы выбрали рабочий лист с именем Пример 2 и получили доступ к столбцу D из него. Теперь нам нужно выполнить некоторые операции со столбцом, к которому осуществляется доступ.

Шаг 4. Используйте свойство Выбрать после столбцов, чтобы выбрать столбец, указанный в текущем рабочем листе.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 5: Запустите код, нажав клавишу F5 или нажав кнопку воспроизведения.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Предположим, мы хотим выбрать диапазон ячеек в разных столбцах. Мы можем комбинировать свойство Range и Columns для этого. Следуйте инструкциям ниже:

Предположим, что у нас есть данные, распределенные между B1 и D4 на листе, как показано ниже:

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 1: Определите новую подпроцедуру для хранения макроса.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 2: Используйте квалификатор « Рабочие листы», чтобы получить доступ к рабочему листу с именем « Пример 3 », где у нас есть данные, показанные на снимке экрана выше.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 3: Используйте свойство Range, чтобы установить диапазон для этого кода от B1 до D4. Используйте следующий диапазон кодов («B1: D4») для того же.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 4: Используйте свойство Columns для доступа ко второму столбцу из выбора. Используйте код как Столбцы (2) для доступа ко второму столбцу из доступного диапазона.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 5: Теперь самая важная часть. Мы получили доступ к рабочему листу, диапазону и столбцу. Однако, чтобы выбрать доступный контент, нам нужно использовать свойство Select в VBA. Смотрите скриншот ниже для макета кода.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

Шаг 6: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.

vba excel столбец по номеру. Смотреть фото vba excel столбец по номеру. Смотреть картинку vba excel столбец по номеру. Картинка про vba excel столбец по номеру. Фото vba excel столбец по номеру

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *