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. Для всех объединенных ячеек в выделенном диапазоне будет подобрана высота или ширина.
Чтобы было нагляднее — я приложил пример, в котором помимо самих кодов есть вырезка из стандартной накладной. Именно в таких документах наиболее часто встречаются подобные казусы и необходимость подбирать высоту и ширину объединенных ячеек.
Скачать пример:
Tips_Macro_HeightWidthInMergeCell.xls (64,0 KiB, 1 841 скачиваний)
Если подобную операцию приходится производить постоянно — советую коды записать в надстройку: Как создать свою надстройку?. Так же можно воспользоваться уже готовым решением в составе MulTEx — Высота/Ширина объединенной ячейки.
Статья помогла? Поделись ссылкой с друзьями!
Изменение ширины столбцов и высоты строк в Excel
Работая в Microsoft Excel, Вы можете свободно изменять высоту строк и ширину столбцов и устанавливать их нужной величины. Excel предлагает множество инструментов осуществить это, включая функцию автоподбора высоты и ширины. В данном уроке мы рассмотрим самые распространенные способы изменения размеров строк и столбцов.
При создании новой книги все строки и столбцы устанавливаются одной высоты и ширины, это происходит по умолчанию. Excel позволяет изменять ширину столбцов и высоту строк самыми различными способами, в том числе с помощью переноса текста по словам и объединения ячеек.
Изменение ширины столбца в Excel
На примере ниже некоторая часть текста в столбце A не отображается, поскольку ширина ячейки слишком мала. Мы можем сделать весь текст видимым, просто изменив ширину столбца А.
- Наведите курсор на границу столбца справа от заголовка, он примет вид двойной стрелки.
- Нажмите и, не отпуская левую кнопку мыши, переместите курсор, чтобы увеличить или уменьшить ширину столбца.
- Отпустите левую кнопку мыши. Ширина изменится.
Если вы вдруг увидели, что вместо ожидаемого результата, вся ячейка заполнена знаками решетки (#####), это означает, что ширины недостаточно для отображения содержимого ячейки. Просто увеличьте ширину столбца, чтобы все содержимое полностью поместилось.
Автоподбор ширины столбца и высоты строки в Excel
Инструмент Автоподбор позволяет установить ширину столбца или высоту строки в соответствии с его содержимым.
- Наведите курсор на границу столбца справа от заголовка, он примет вид двойной стрелки.
- По двойному щелчку левой кнопкой мыши ширина столбца автоматически изменится в соответствии с содержимым ячеек.
Вы можете воспользоваться инструментом Автоподбор для изменения ширины сразу нескольких столбцов. Для этого выделите столбцы, которые необходимо изменить, а затем на вкладке Главная из раскрывающегося меню команды Формат выберите пункт Автоподбор ширины столбца. Этот же способ может быть использован для автоподбора высоты строки.
Изменение высоты строки в Excel
- Наведите курсор на нижнюю границу заголовка строки, он примет вид двойной стрелки.
- Нажмите и, не отпуская левую кнопку мыши, переместите курсор, чтобы увеличить или уменьшить высоту строки.
- Отпустите левую кнопку мыши. Высота строки изменится.
Изменение высоты всех строк на листе Excel
Вместо того чтобы изменять размеры строк и столбцов по отдельности, Вы также можете изменить их одновременно. Этот метод позволяет установить единый размер всех строк и столбцов на листе. В следующем примере мы установим одинаковую высоту для каждой строки.
- Выделите все ячейки на листе Excel, для этого щелкните по кнопке Выбрать все, которая находится на пересечении заголовков строк и столбцов.
- Наведите курсор на нижнюю границу заголовка любой строки, он примет вид двойной стрелки.
- Нажмите и, не отпуская левую кнопку мыши, переместите курсор, чтобы увеличить или уменьшить высоту строки.
- Отпустите левую кнопку мыши. Высота всех строк изменится и станет одинаковой.
Вы можете выделить все ячейки на листе Excel просто нажав комбинацию Ctrl+A на клавиатуре.
Автоподбор в 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 (вставка значения из ячейки сверху).
Еще : слово Автоподбор — это термин 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твенность примера, вы усвоили несколько важных приёмов, которые помогут вашим таблицам выглядеть более эффектно.