Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Размер ячейки (высота строки, ширина столбца)

    Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.

    Размер ячейки

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

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

    Информационные окна с высотой строки и шириной столбца в Excel
    Высота строки и ширина столбца в Excel

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

    На сайте поддержки офисных приложений Microsoft так написано об этих величинах:

    • высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
    • ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.

    Смотрите, как сделать все ячейки рабочего листа квадратными.

    Высота строки

    Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.

    Примеры изменения высоты строк:

    Пример 1
    Изменение высоты отдельной ячейки:

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

    Пример 2
    Изменение высоты строки:

    в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.

    Пример 3
    Изменение высоты ячеек заданного диапазона:

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

    Пример 4
    Изменение высоты ячеек целого столбца:

    в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.

    Ширина столбца

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

    Примеры изменения ширины столбцов:

    Пример 1
    Изменение ширины отдельной ячейки:

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

    Пример 2
    Изменение ширины столбца:

    в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.

    Пример 3
    Изменение ширины ячеек заданного диапазона:

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

    Пример 4
    Изменение ширины ячеек целой строки:

    в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.

    Автоподбор ширины

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

    Имейте в виду, что ширина столбца будет подогнана по расположенной в этом столбце ячейке с самым длинным содержимым. Например, если длина содержимого ячейки Cells(7, 5) будет превышать длину содержимого ячейки Cells(5, 5), то автоподбор ширины пятого столбца произойдет по содержимому ячейки Cells(7, 5), несмотря на то, что в строке кода указана другая ячейка.

    Если в ячейке содержится текст, состоящий из нескольких строк, EntireColumn.AutoFit не сработает, если только ширина ячейки изначально не будет превышать ширину самой большой строки. Чтобы автоподбор ширины ячейки получился, предварительно необходимо принудительно увеличить ширину ячейки до превышения ширины текста:

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


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    26 комментариев для “VBA Excel. Размер ячейки (высота строки, ширина столбца)”

    1. Добрый день.
      Подскажите пожалуйста, можно ли через макрос сделать автоподбор объединенных ячеек?
      Заранее благодарю.
      С уважением,
      Павел.

    2. Евгений, добрый день.
      Спасибо большое за ответ. Буду пробовать!
      С уважением,
      Павел.

    3. Добрый день!
      Подскажите, пожалуйста, возможно ли сделать подгон ширины ячейки, в зависимости от вводимых значений?
      К примеру, я расписываю некий процесс, в котором один процесс (ячейка) будет длиться 12 секунд, другой — 27 секунд, и т.д. Возможно ли сделать так, чтобы ячейка изменялась пропорционально вводимым значениям?

    4. Евгений

      Добрый день, Сергей!
      Возможно, подойдет такой способ (все процедуры должны быть расположены в модуле листа):

      Для тестирования запускаем процедуру Primer.

    5. Спантомано.

      Добрый день.
      Подскажите, пожалуйста, возможно ли автоматическая подгонка высоты ячейки, если идёт объединение нескольких ячеек и перенос по словам.
      У меня есть выпадающий список, в котором объединенные ячейки и стоит галочка переносить по словам.
      В списке текст с одним предложением и 4мя.
      Автоматическая подгонка сокращает текст до первого предложения.
      С уважением,
      Спантомано.

      1. Евгений

        Добрый день, Спантомано!
        В объединенных ячейках метод Range.EntireRow.AutoFit не работает. Посмотрите решение подобной задачи здесь.

    6. Доброго времени суток.
      Сломал всю голову себе (самоучка)…
      Есть линейчатая диаграмма, данные берёт из динамической таблицы. Внося новые данные в таблицу график дополняется, но его размер не увеличивается. В моем случае нужно чтобы менялась высота. Я думал завязать высоту графика на высоту таблицы, но не представляю как. Помогите пожалуйста.

    7. Валентина

      Добрый день. Подскажите почему при автоподборе ширины столбца, на экране все красиво, а на печать выводятся ##########. Как устранить? Невозможно пользоваться автоподбором.

    8. Добрый день!
      Можно ли написать макрос на автоподбор высоты строки? К примеру у меня на первом листе имеется таблица с данными, а на втором листе имеется форма акта. В форме акта я заполняю только номер самого акта и на лист с актом подтягиваются значения с первого листа, соответствующие номеру указанного акта.

      1. Евгений

        Здравствуйте, Руслан!
        Разместите следующий код в модуле листа с актом. Перечислите в коде по одной любой ячейке в каждой строке, высоту которой необходимо подобрать.

        В форматах заполняемых ячеек должен быть подключен перенос по словам.

    9. копирование массива и специальная вставка на другой лист позволяет сохранить ширину столбцов.
      Как сохранить высоту строк ? (формат по образцу не помогает)

      1. Евгений

        С автоподбором высоты строк можно так:

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

        1. » …задать высоту, не зависящую от содержимого ячеек …»

          именно это мне и надо
          т.е. скопировать и формулы, и формат, и РАЗНУЮ ВЫСОТУ строк
          и всё это вставить на другой лист
          Какой в этом случае будет цикл ?

          1. Евгений

            Пример копирования ячеек диапазона «A1:C8» с Листа1 на Лист2 с учетом высоты строк:

            или так:

    10. спасибо.
      " ...Dim i1 As Long, i2 As Long ..."
      это обязательное условие или «меньше не бывает» ?
      Я бы «Byte» засветил (чтоб без сдачи)

      1. Евгений

        Можно и “Byte”, если цикл не выходит за пределы этого типа данных.

    11. Дмитрий

      Добрый день, подскажите пожалуйста. Как сделать, чтобы содержимое ячейки равнялось половине ширины ячейки. То есть я мышкой меняю ширину ячейки, а вместе с ней меняется и содержимое.

      1. Евгений

        Здравствуйте, Дмитрий!
        Как сделать, чтобы размер шрифта менялся сразу при увеличении ширины столбца, я не знаю. Следующий код подгоняет содержимое приблизительно до половины ширины ячейки «A1», но только после клика по рабочему листу (смена активной ячейки):

    12. Сбитый Лётчик Небосводов

      Здравствуйте!
      Почему .AutoFit не срабатывает, если в ячейке формула? При этом после выполнения макроса руками автоподбор по значению устанавливается.
      И известно ли решение?

      1. Евгений

        Добрый день!
        Мне не удалось смоделировать ситуацию, когда AutoFit не срабатывает для ячейки с формулой.

        1. Сбитый Лётчик Небосводов

          Здравствуйте, Евгений!
          Разобрался, столкнувшись ещё раз. Так случается, если .AutoFit до xlCalculationAutomatic.

    13. Вероника

      Добрый день.
      подскажите как решить следующую задачку?
      Для любого количества строк на листе «Тест» организовать посредством макроса присвоение значения 1 высоте строк со значением 0 в первом столбце и присвоение значения 12 высоте строк со значением не равным 0 в первом столбце по нажатию на кнопку «Сохранить» (или что эквивалентно по нажатию горячих клавиш Ctrl+S).

      1. Евгений

        Здравствуйте, Вероника!
        Разместите этот код в модуле книги:

    Обсуждение закрыто.