Excel vba высота строки - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
202 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba высота строки

Подбор высоты строки/ширины столбца объединенной ячейки

Для начала немного теории. Если в ячейках листа Excel записан некий длинный текст, то обычно устанавливают перенос на строки(вкладка Главная -группа ВыравниваниеПеренос текста), чтобы текст не растягивался на весь экран, а умещался в ячейке. При этом высота ячейки тоже должна измениться, чтобы отобразить все содержимое. Если речь идет всего об одной простой ячейке — проблем не возникает. Обычно, чтобы установить высоту строки на основании содержимого ячейки, достаточно навести курсор мыши в заголовке строк на границу строки(курсор приобретет вид направленных в разные стороны стрелок — ) и дважды быстро щелкнуть левой кнопкой мыши. Тоже самое можно сделать и для ширины столбцов.
Но с объединенными ячейками такой фокус не прокатывает — ширина и высота для этих ячеек так не подбирается, сколько ни щелкай и приходится вручную подгонять каждую, чтобы текст ячейки отображался полностью:

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

‘————————————————————————————— ‘ Procedure : RowHeightForContent ‘ Author : The_Prist(Щербаков Дмитрий) ‘ http://www.excel-vba.ru ‘ Purpose : Функция подбирает высоту строки/ширину столбца объединенных ячеек по содержимому ‘————————————————————————————— Function RowColHeightForContent(rc As Range, Optional bRowHeight As Boolean = True) ‘rc — ячейка, высоту строки или ширину столбца которой необходимо подобрать ‘bRowHeight — True — если необходимо подобрать высоту строки ‘ False — если необходимо подобрать ширину столбца Dim OldR_Height As Single, OldC_Widht As Single Dim MergedR_Height As Single, MergedC_Widht As Single Dim CurrCell As Range Dim ih As Integer Dim iw As Integer Dim NewR_Height As Single, NewC_Widht As Single Dim ActiveCellHeight As Single If rc.MergeCells Then With rc.MergeArea ‘если ячейка объединена ‘запоминаем кол-во столбцов iw = .Columns(.Columns.Count).Column — rc.Column + 1 ‘запоминаем кол-во строк. ih = .Rows(.Rows.Count).Row — rc.Row + 1 ‘Определяем высоту и ширину объединения ячеек MergedR_Height = 0 For Each CurrCell In .Rows MergedR_Height = CurrCell.RowHeight + MergedR_Height Next MergedC_Widht = 0 For Each CurrCell In .Columns MergedC_Widht = CurrCell.ColumnWidth + MergedC_Widht Next ‘запоминаем высоту и ширину первой ячейки из объединенных OldR_Height = .Cells(1, 1).RowHeight OldC_Widht = .Cells(1, 1).ColumnWidth ‘отменяем объединение ячеек .MergeCells = False ‘назначаем новую высоту и ширину для первой ячейки .Cells(1).RowHeight = MergedR_Height .Cells(1, 1).EntireColumn.ColumnWidth = MergedC_Widht ‘если необходимо изменить высоту строк If bRowHeight Then ‘.WrapText = True ‘раскомментировать, если необходимо принудительно выставлять перенос текста .EntireRow.AutoFit NewR_Height = .Cells(1).RowHeight ‘запоминаем высоту строки .MergeCells = True If OldR_Height ‘ .WrapText = True ‘раскомментировать, если необходимо принудительно выставлять перенос текста тогда код сам проставит переносы. Но тут следует учитывать, что в данном случае перенос будет выставлен для всех ячеек, что не всегда отвечает условиям

  • функция подбирает высоту и ширину исключительно для объединенных ячеек. Если ячейка не объединена — код оставит её без изменений
  • Теперь о том, как это работает и как применять. Для начала необходимо приведенный выше код функции вставить в стандартный модуль. Сама по себе функция работать не будет — её надо вызывать из другого кода, который определяет какие ячейки обрабатывать. В качестве такого кода я предлагаю следующий:

    Sub ChangeRowColHeight() Dim rc As Range Dim bRow As Boolean bRow = (MsgBox(«Изменять высоту строк?», vbQuestion + vbYesNo, «www.excel-vba.ru») = vbYes) ‘bRow = True: для изменения высоты строк ‘bRow = False: для изменения ширины столбцов Application.ScreenUpdating = False For Each rc In Selection RowColHeightForContent rc, bRow Next Application.ScreenUpdating = True End Sub

    Этот код также необходимо вставить в стандартный модуль. Теперь его можно будет вызвать из этой книги, нажатием клавиш Alt+F8 и выбрав ChangeRowColHeight , или создав на листе кнопку и назначив ей макрос. После этого достаточно будет выделить диапазон ячеек, среди которых есть объединенные и вызвать макрос ChangeRowColHeight. Для всех объединенных ячеек в выделенном диапазоне будет подобрана высота или ширина.
    Чтобы было нагляднее — я приложил пример, в котором помимо самих кодов есть вырезка из стандартной накладной. Именно в таких документах наиболее часто встречаются подобные казусы и необходимость подбирать высоту и ширину объединенных ячеек.
    Скачать пример:

    Читать еще:  Меню сервис в excel 2020

    Tips_Macro_HeightWidthInMergeCell.xls (64,0 KiB, 1 841 скачиваний)

    Если подобную операцию приходится производить постоянно — советую коды записать в надстройку: Как создать свою надстройку?. Так же можно воспользоваться уже готовым решением в составе MulTEx — Высота/Ширина объединенной ячейки.

    Статья помогла? Поделись ссылкой с друзьями!

    Изменение ширины столбцов и высоты строк в Excel

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

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

    Изменение ширины столбца в Excel

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

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

    Если вы вдруг увидели, что вместо ожидаемого результата, вся ячейка заполнена знаками решетки (#####), это означает, что ширины недостаточно для отображения содержимого ячейки. Просто увеличьте ширину столбца, чтобы все содержимое полностью поместилось.

    Автоподбор ширины столбца и высоты строки в Excel

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

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

    Вы можете воспользоваться инструментом Автоподбор для изменения ширины сразу нескольких столбцов. Для этого выделите столбцы, которые необходимо изменить, а затем на вкладке Главная из раскрывающегося меню команды Формат выберите пункт Автоподбор ширины столбца. Этот же способ может быть использован для автоподбора высоты строки.

    Изменение высоты строки в Excel

    1. Наведите курсор на нижнюю границу заголовка строки, он примет вид двойной стрелки.
    2. Нажмите и, не отпуская левую кнопку мыши, переместите курсор, чтобы увеличить или уменьшить высоту строки.
    3. Отпустите левую кнопку мыши. Высота строки изменится.

    Изменение высоты всех строк на листе Excel

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

    1. Выделите все ячейки на листе Excel, для этого щелкните по кнопке Выбрать все, которая находится на пересечении заголовков строк и столбцов.
    2. Наведите курсор на нижнюю границу заголовка любой строки, он примет вид двойной стрелки.
    3. Нажмите и, не отпуская левую кнопку мыши, переместите курсор, чтобы увеличить или уменьшить высоту строки.
    4. Отпустите левую кнопку мыши. Высота всех строк изменится и станет одинаковой.

    Вы можете выделить все ячейки на листе Excel просто нажав комбинацию Ctrl+A на клавиатуре.

    Автоподбор в EXCEL высоты строки по содержимому при объединении ячеек

    Если текст содержится в объединенных ячейках, то автоподбор высоты строки не сработает.

    В этой статье Вы НЕ найдете решение вот такой задачи: высота строки должна подбираться автоматически (без участия пользователя) в зависимости от длины текста в ячейке (текст возвращается формулой и его длина может меняться, поэтому нужно изменять высоту строки). Статья вообще не об этом: если ячейки объединены, то стандартный автоподбор высоты по содержимому не работает (это когда Вы кликаете между заголовками строк и высота строки изменяется, чтобы вместить все содержимое ячейки), поэтому используйте вместо объединения ячеек Формат ячеек Выравнивание по центру выделения — это не панацея, но в некоторых случаях подходящая замена.

    Читать еще:  Как ускорить работу файла excel

    Кто заинтересовался читаем дальше.

    На рисунке снизу приведена типичная ситуация: в двух объединенных ячейках А1 и В1 содержится текстовая строка (объединены 2 ячейки в одной строке). Требуется быстро подобрать по содержанию высоту строки 1 (в ячейках включена опция Переносить по словам ).

    Предположим, что пользователь, желая использовать механизм автоподбора (см. статью Автоподбор ширины столбца и высоты строки по содержимому ячеек ), два раза кликает на границу между первой и второй строки и получает, то что мы видим на рисунке ниже — высота строки не достаточна для полного отображения содержимого объединенных ячеек.

    Т.к. автоподбор высоты строки в этом случае не работает, то обычно ограничиваются подбором высоты строки в ручную (на глазок). Это, конечно, не удобно.

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

    • вместо объединения ячеек использовать формат ячейки Выравнивание по центру выделения ;
    • оставить объединение ячеек, но использовать дополнительную ячейку.

    Выравнивание по центру выделения

    В некоторых случаях можно разместить данные в нескольких ячейках (без объединения ячеек) и продолжать пользоваться автоподбором высоты по содержимому. Для этого используйте опцию Формата ячеек Выравнивание по центру выделения: выделите нужные ячейки, откройте Формат ячеек ( CTRL + SHIFT + F , вкладка Выравнивание ), а в выпадающем списке Выравнивание по горизонтали установите Выравнивание по центру выделения .

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

    СОВЕТ: Ячейки чаще всего объединяют для выравнивания заголовка листа по середине страницы. Но, чтобы это сделать, вовсе нет необходимости объединять ячейки. Достаточно их просто выделить и установить опцию Выравнивание по центру выделения .

    Дополнительная ячейка

    Предположим, что имеется 2 объединенных ячейки А4 (ширина 15,14) и В4 (ширина 16,14). Узнать ширину можно нажав на правую границу заголовка столбца.

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

    Теперь в ячейке С4 введите формулу =А4 , а ширину ячейки сделайте равной сумме ширины А4 и В4 , т.е. 15,14+16,14=31,28.

    Затем опять дважды кликните на границу между четвертой и пятой строкой.

    Самое удивительное, что столбец можно скрыть — автоподбор продолжит работать!

    СОВЕТ . Задать ширину столбца можно через меню Формат на вкладке Главная .

    СОВЕТ : Используйте объединение ячеек, находящихся в одной строке, взвесив все «за» и «против», т.к. объединение ячеек служит скорее для «наведения красоты на листе», а не для выполнения вычислений. Не будем забывать, что MS EXCEL все таки скорее создавался для выполнения вычислений и анализа данных, а не для подготовки презентаций. Хотя, конечно, таблицы тоже должны выглядеть профессионально. Эту дилемму каждый решает по своему, лично я стараюсь не объединять ячейки без крайней необходимости. А объединение ячеек, находящихся в одном столбце (т.е. объединение строк), следует вообще избегать, особенно в таблицах с данными, т.к. в некоторых случаях перестают корректно работать фильтр и Сводная таблица . Кроме того, перестает корректно работать сочетание клавиш CTRL+D (вставка значения из ячейки сверху).

    Читать еще:  Vba excel отключить обновление экрана

    Еще : слово Автоподбор — это термин EXCEL (см. справку EXCEL), а не описание решения. В статье описано лишь стандартное средство EXCEL — Автоподбор высоты строки по содержимому ячейки. Изменять высоту строки в зависимости от значения ячейки можно лишь с помощью VBA, либо в ручную, в том числе с использованием Автоподбора (Автоподбор — это тоже в ручную, т.к. пользователь кликает между заголовками строк каждый раз, когда нужно поменять высоту).

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

    Excel vba высота строки

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

    Синтез

    Каждый приём, примененный в этом учебном примере, — банальщина, а сведенные воедино — уже некая магия. Какие же приёмы мы объединили:

    Суть учебного примера

    Будем формировать вот такой прямоугольник из звёздочек в рамке. Высотой и шириной которого, можно управлять при помощи двух счётчиков слева.

    Скачать пример

    Разбор решения по шагам:

    Смотрим лист Шаг 1 . Рисуем жирную рамку вокруг диапазона D2:AY23 . Зона для построения прямоугольника — E3:AX22 .

    В ячейке A1 будем хранить ширину прямоугольника, который нам надо будет нарисовать звёздочками. В ячейке A2 — высоту.

    На пересечении строки 25 и столбца BA намечаем единичками наш будущий пояс видимости . Что это такое, расскажу позже.

    Создаём 2 именованных диапазона для A1 и A2 с названиями Ширина и Высота соответственно.

    В ячейку E3 вводим формулу
    =ЕСЛИ(И(СТОЛБЕЦ() 0;Видимость);1;0) или =IF(OR(SUM(E3:E22)>0;Видимость);1;0). Для нашего удобства я ввёл ещё один именованный диапазон Видимость , который располагается на листе Настройки и позволяет для наших нужд сделать все строки/столбцы видимыми, что может потребоваться вам для внесения изменений на листе (в противном случае вам пришлось бы делать видимыми столбцы и строки вручную, что довольно неудобно). Если Видимость истинна, то все наши сигнальные ячейки пояса верности видимости становятся равными всегда 1, вне зависимости от значений ячеек диапазона E3:AX22 . В этом виновата формула ИЛИ (OR), которая возвращает ИСТИНА, если хотя бы 1 из её авгументов принял значение ИСТИНА.

    Займёмся рисованием звёздочек на месте единичек в диапазоне E3:AX22 . Создадим правило условного форматирования, как показано на экранах.

    Ну и сделаем простой макрос, который будет сканировать пояс видимости и если текущая видимость столбца/строки не соответствует поясу, то он приводит это в соответствие, то есть либо скрывает, либо показывает строку/столбец.

    Макрос, оформленный в виде процедуры ShowHide , будем вызывать из событий изменения счётчиков

    а также события активации листа

    Сводим всё воедино

    Итак, на итоговом листе Шаг 3 все компоненты собраны воедино. Элементы управления счётчики настроены на изменение именованных диапазонов Ширина и Высота , которые через формулы влияют на появление единичек в диапазоне E3:AX22 . На эти единички реагирует условное форматирование, рисуя на их месте звёздочки, и на них же реагируют ячейки пояса видимости, принимая значения 1 для тех столбцов/строк, которые должны быть видимыми, и 0 — для тех, что должны быть скрыты. Макрос, который скрывает/показывает строки и столбцы вызывается из события изменения счётчика и события активации листа.

    Вывод

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

    0 0 голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    ВсеИнструменты
    ×
    ×