Перейти к содержимому

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

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

  1. Обращение к ячейке
  2. Запись информации в ячейку
  3. Чтение информации из ячейки
  4. Очистка значения ячейки

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

Допустим, у нас есть два открытых файла: «Книга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")

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

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

ActiveCell
Range("A1")
Cells(1, 1)
Cells(1, "A")

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

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

'по основному имени листа
Лист2.Cells(2, 7)
'по имени ярлыка
Sheets("Имя ярлыка").Cells(3, 8)

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

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

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

Содержание ячейки определяется ее свойством «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. Ячейки (обращение, запись, чтение, очистка): 46 комментариев

  1. Игорь

    Спасибо Евгений. Макрос работает. Может я не так подключил макрос но у меня получилось работает макрос если кликаеш по ячейке с названием листа , конечно хотелось что бы макрос срабатывал от нажатия кнопки а название брал из активной ячейки. Мне очень не ловко , но если можно помогите с макросом по такому принципу.
    Смысл такой. В таблице до 1000 листов , они постоянно добавляются , на первом листе есть список с названием всех листов . Кнопка с макросом для перехода на любой лист находится с верху в закрепленной области . Передвигаясь по списку стал на название листа нажал на кнопку перешел на нужный лист. Такой принцип работал в гугл таблице, но гугл таблица разрослась стала ну очень медленно работать, приходится переходить на exce.
    Все равно Евгений Вам спасибо за помощь.

  2. Евгений (автор статьи)

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

    Sub Переход_к_листу()
    Worksheets(ActiveCell.Value).Select
    End Sub
    

    или, если использовать кнопку из группы элементов ActiveX (оболочка процедуры создается автоматически при двойном клике по вновь созданному элементу управления):

    Private Sub CommandButton1_Click()
    Worksheets(ActiveCell.Value).Select
    End Sub
    
  3. Игорь

    Евгений спасибо , работает ЧЕТКО. Это именно то что нужно. Самый первый вариант тоже класс . Один клик и тебя уносит на 1000-ый лист. Просто этот клик может быть случайным и будешь тогда "носиться" по всей таблице, а второй вариант это исключает, хоть и надо два "движения" сделать. Такого решения этой задачи я нигде не встречал, хоть и перерыл кучу интернета. Может еще кому пригодится.

  4. Денис

    Добрый день Евгений.
    Подскажите пож-ста "чайнику".
    По строке макроса :
    Me.TextBox1 = Sheets("List of words").Cells(RowNow, 3).Value
    в TextBox формы (на экране) отображаются данные из третьего столбца. Что нужно добавить в код, чтобы в TextBox отображались данные из второго и третьего столбца (оставить между ними - пробел).
    Заранее спасибо.

    1. Евгений (автор статьи)

      Привет, Денис!
      Для объединения значений ячеек c пробелом между ними используем знак & (амперсанд).

      Me.TextBox1 = Sheets("List of words").Cells(RowNow, 2).Value _
      & " " & Sheets("List of words").Cells(RowNow, 3).Value
      

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

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