Найти в Дзене
Макрос решает

Продвинутая работа с ячейками в Excel VBA: позиция в диапазоне, массовый выбор и изменение формата

Мы уже рассмотрели, как обращаться к конкретной ячейке или диапазону в Excel VBA. На этом уроке двинемся глубже — изучим малоизвестные, но крайне полезные возможности работы с ячейками: Этот подход откроет перед вами новые горизонты автоматизации Excel, особенно если вы работаете с массивами данных, шаблонами или динамическими таблицами. Обычно, чтобы обратиться к ячейке, мы указываем её строку и столбец: Cells(1, 2).Value = 50 ' Это B1 Но есть и альтернативный способ — обращаться по единому порядковому номеру, начиная с A1 и считая слева направо, сверху вниз. Пример: Cells(2).Value = 50 Что это значит? Ячейка с номером 1 — это A1, номер 2 — B1, номер 3 — C1, и так далее, пока не дойдём до конца строки. После Z1 идёт A2, затем B2 и так далее. Такой подход редко используется, но он может быть полезен в генераторе значений или автоматических скриптах, где позиции считаются последовательно. Теперь — более практичная и мощная техника. Допустим, у нас есть диапазон: Range("A2:C6") Он содерж
Оглавление

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

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

Этот подход откроет перед вами новые горизонты автоматизации Excel, особенно если вы работаете с массивами данных, шаблонами или динамическими таблицами.

🟡 1. Обращение к ячейке через порядковый номер

Обычно, чтобы обратиться к ячейке, мы указываем её строку и столбец:

Cells(1, 2).Value = 50 ' Это B1

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

Cells(2).Value = 50

Что это значит? Ячейка с номером 1 — это A1, номер 2 — B1, номер 3 — C1, и так далее, пока не дойдём до конца строки. После Z1 идёт A2, затем B2 и так далее.

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

🟡 2. Использование позиции ячейки внутри диапазона

Теперь — более практичная и мощная техника. Допустим, у нас есть диапазон:

Range("A2:C6")

Он содержит 15 ячеек (3 столбца × 5 строк). Иногда вместо указания точных координат ячейки, хочется просто сказать: «Возьми шестую ячейку в этом диапазоне и вставь туда значение».

Как это делается:

Range("A2:C6").Cells(6).Value = 50

Что произошло? Excel начинает считать ячейки в диапазоне по строкам, слева направо:

1: A2
2: B2
3: C2
4: A3
5: B3
6: C3 ← сюда вставится 50

📌 Почему это удобно?

  • Можно обращаться к ячейке через переменную i, например, в цикле.
  • Не нужно вручную вычислять, где конкретно находится ячейка.
  • Код становится универсальным и динамичным.

🟢 Пример: заполнить все ячейки диапазона числами от 1 до 15

Sub FillRangeSequential()
Dim rng As Range
Set rng = Range("A2:C6")
Dim i As Integer
For i = 1 To rng.Cells.Count
rng.Cells(i).Value = i
Next i
End Sub

⚡ Результат — диапазон заполняется числами от 1 до 15. Всё лаконично, без лишней математики.

🟡 3. Выделение всех ячеек листа

Иногда вам нужно что-то сделать со всем листом сразу. Например:

  • удалить весь формат;
  • поменять шрифт;
  • очистить значения;
  • вставить шаблон;
  • задать границы.

Вместо того чтобы указывать диапазон вручную (например, Range("A1:XFD1048576")), используем краткую и понятную конструкцию:

Cells.Select

💡 Эта команда выбирает все ячейки на активном листе. После этого можно выполнять любые действия с выделенным массивом данных.

🟢 Пример: изменение шрифта и его размера на всём листе

Допустим, вам нужно изменить стандартный шрифт (обычно это Calibri 11) на Arial 15. Вот код:

Sub FormatAllCells()
With Cells.Font
.Name = "Arial"
.Size = 15
End With
End Sub

🔧 Эта команда:

  • не выделяет явно ячейки;
  • сразу меняет шрифт у всех ячеек;
  • работает на всём листе.

🔁 Возврат к исходному состоянию

Если вам нужно вернуть всё как было, используйте:

Sub ResetFont()
With Cells.Font
.Name = "Calibri"
.Size = 11
End With
End Sub

📌 Полезно для работы с шаблонами: после генерации отчёта вы можете быстро «очистить» или привести оформление в порядок.

🔄 Обобщённый пример: цикл с динамической ссылкой на ячейку

Sub FillDiagonal()
Dim i As Integer
For i = 1 To 10
Cells(i, i).Value = i * 10
Next i
End Sub

Этот код заполнит диагональ от A1 до J10 значениями 10, 20, 30.... Вы видите, как динамически можно оперировать и строкой, и столбцом.

🧩 Практические кейсы для использования

-2

🔚 Заключение

Понимание того, как Excel VBA "видит" ячейки — это ключ к созданию гибких и надёжных макросов. Работа с порядковыми номерами, позициями внутри диапазонов и массовым форматированием — это ваш следующий уровень автоматизации.

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

🧠 Закрепим:

  • Cells(строка, столбец) — классический способ.
  • Cells(номер) — считает ячейки слева направо, сверху вниз.
  • Range().Cells(i) — доступ к i-й ячейке внутри диапазона.
  • Cells.Select — выделяет все ячейки.
  • Cells.Font.Name и .Size — массовое изменение стиля.

Подпишись на канал и напиши свои впечатления от использования макросов