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

VBA Excel. Автоподбор ширины объединенной ячейки

Автоподбор ширины объединенной ячейки с помощью кода VBA Excel, когда метод AutoFit не работает. Обработка ячеек по списку адресов из массива.

  1. Автоподбор ширины ячейки
  2. Обработка списка ячеек

Автоподбор ширины ячейки

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

Здесь мы рассмотрим макрос для автоподбора ширины ячейки, объединенной с другими по горизонтали в одной строке, которые обычно используются в заголовках электронных таблиц Excel. Ширина столбцов, пересекающихся с объединенной ячейкой, будет одинаковой. Код работает и с необъединенными ячейками.

Для решения задачи по автоподбору ширины необходимо с помощью кода VBA определить:

  1. Длину текста (количество символов). Длина одного символа текста со шрифтом и его размером по умолчанию приблизительно соответствует длине символа, в котором измеряется ширина ячейки.
  2. Размер шрифта, чтобы рассчитать коэффициент, увеличивающий или уменьшающий ширину ячейки в зависимости от его (шрифта) размера.
  3. Количество столбцов в объединенной ячейке, чтобы вычислить ширину одного столбца.

Макрос VBA Excel для автоподбора ширины ячейки с учетом размера используемого шрифта:

Sub PodborShiriny()
Dim myCell As Range, myLen As Integer, _
myCount As Integer, k As Single, n As Single
myLen = Len(CStr(ActiveCell))
myCount = Selection.Count
n = 11
k = ActiveCell.Font.Size / n
For Each myCell In Selection
myCell.ColumnWidth = myLen * k / myCount
Next
End Sub

Переменные:

  • myCell - отдельная ячейка в объединенной;
  • myLen - длина текста в активной ячейке;
  • myCount - количество столбцов, которое соответствует количеству горизонтально расположенных отдельных ячеек в объединенной;
  • k - коэффициент, вносящий поправку в зависимости от размера шрифта;
  • n - размер шрифта по умолчанию.*

* У меня по умолчанию установлен шрифт Calibri размером 11, поэтому n = 11. Если у вас по умолчанию Arial размером 10, тогда и в коде укажите n = 10. Далее подкорректируйте значение переменной n опытным путем, так как длина текста зависит от процентного соотношения широких и узких символов, если шрифт не моноширинный. Переменной n можно присваивать и дробные значения для более точного автоподбора.

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

Обработка списка ячеек

Укажите список объединенных ячеек в качестве аргументов функции Array. Для списка используйте адреса только первых ячеек из состава объединенных. Можно добавлять в список и адреса одиночных ячеек.

Sub ObkhodYacheyek()
Dim myCell() As Variant, myElem As Variant
myCell = Array("A1", "D1", "G1")
For Each myElem In myCell
Range(myElem).Select
Call PodborShiriny
Next
End Sub

Переменные:

  • myCell - массив со списком адресов объединенных ячеек;
  • myElem - используется как элемент массива myCell.

Макрос ObkhodYacheyek по адресам из списка обращается к каждой ячейке по очереди, выделяет ее и запускает код автоподбора ширины PodborShiriny.

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

Sub ObkhodYacheyek()
Dim myCell() As String, myElem As Variant
myCell = Split(Selection.Address, ",")
For Each myElem In myCell
Range(myElem).Select
Call PodborShiriny
Next
End Sub

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

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