Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.
Размер ячейки
Размер ячейки по высоте и ширине определяется высотой строки и шириной столбца, на пересечении которых она находится. Если, в вашем случае, нежелательно изменять размеры всей строки или всего столбца, используйте объединенные ячейки нужной величины.
Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.
Высота строки и ширина столбца в Excel
Программно, без дополнительных макросов, можно изменять высоту строки только в пунктах, а ширину столбца только в символах.
На сайте поддержки офисных приложений Microsoft так написано об этих величинах:
- высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
- ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.
Смотрите, как сделать все ячейки рабочего листа квадратными.
Высота строки
Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.
Примеры изменения высоты строк:
Пример 1
Изменение высоты отдельной ячейки:
ActiveCell.RowHeight = 10 |
в результате, строка, в которой находится активная ячейка, приобретает высоту, равную 10 пунктам.
Пример 2
Изменение высоты строки:
в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.
Пример 3
Изменение высоты ячеек заданного диапазона:
Range(«A1:D6»).RowHeight = 20 |
в результате, каждой из первых шести строк рабочего листа будет задана высота, равная 20 пунктам.
Пример 4
Изменение высоты ячеек целого столбца:
Columns(5).RowHeight = 15 |
в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.
Ширина столбца
Для изменения ширины столбца используйте свойство ColumnWidth объекта Range. Как и в случае с высотой строки, не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — ширина всех столбцов, пересекающихся с объектом Range будет изменена после присвоения свойству ColumnWidth этого объекта нового значения.
Примеры изменения ширины столбцов:
Пример 1
Изменение ширины отдельной ячейки:
ActiveCell.ColumnWidth = 15 |
в результате, столбец, в котором находится активная ячейка, приобретает ширину, равную 15 символам.
Пример 2
Изменение ширины столбца:
Columns(3).ColumnWidth = 50 |
в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.
Пример 3
Изменение ширины ячеек заданного диапазона:
Range(«A1:D6»).ColumnWidth = 25 |
в результате, каждому из первых четырех столбцов рабочего листа будет задана ширина, равная 25 символам.
Пример 4
Изменение ширины ячеек целой строки:
в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.
Автоподбор ширины
Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:
‘запишем для примера в любую ячейку рабочего ‘листа какой-нибудь текст, например, такой: Cells(5, 5) = «Автоподбор ширины ячейки» ‘теперь подгоним ширину ячейки, а точнее ‘столбца, в котором эта ячейка находится: Cells(5, 5).EntireColumn.AutoFit |
Имейте в виду, что ширина столбца будет подогнана по расположенной в этом столбце ячейке с самым длинным содержимым. Например, если длина содержимого ячейки Cells(7, 5) будет превышать длину содержимого ячейки Cells(5, 5), то автоподбор ширины пятого столбца произойдет по содержимому ячейки Cells(7, 5), несмотря на то, что в строке кода указана другая ячейка.
Как осуществить автоподбор ширины объединенной ячейки, в которой метод AutoFit не работает, смотрите в следующей статье.
How can I alter the row heights of all my non empty rows in my EXCEL sheet?
Thanks in advance,
w.
asked Feb 14, 2011 at 10:54
1
...EntireRow.RowHeight = value;
cambraca
26.7k16 gold badges66 silver badges99 bronze badges
answered Dec 29, 2011 at 15:23
Phred MenyhertPhred Menyhert
2,3904 gold badges18 silver badges19 bronze badges
1
answered Apr 26, 2013 at 8:09
liangliang
1,5311 gold badge19 silver badges22 bronze badges
1
I use the following:
xlWorkSheet.Rows.RowHeight = height;
xlWorkSheet.StandardWidth = width;
answered Jul 31, 2014 at 6:11
SinnichSinnich
3425 silver badges17 bronze badges
MySheet.UsedRange.EntireRow.Height = value;
cambraca
26.7k16 gold badges66 silver badges99 bronze badges
answered Feb 14, 2011 at 20:08
AlainAlain
26.4k19 gold badges110 silver badges182 bronze badges
4
This works for me:
var SomeCell = (Excel.Range)_xlSheet.Cells[1, 1];
SomeCell.Value2 = "What was D.D. Eisenhower's Gettysburg Address?";
SomeCell.RowHeight = 32;
answered Jul 11, 2016 at 16:17
Try this
sampleRange.Resize.RowHeight=x; //x's type must int
answered Dec 21, 2015 at 2:42
2
try this, you can loop true all rows with a for loop something like this
int i = 0;
for (var i = 0; i < column.Count(); i++)
{
worksheet.Row(i).Height = 100;
}
answered Aug 14, 2019 at 19:51
1
using (XLWorkbook xLWorkbook = new XLWorkbook())
{
var wordsheet = xLWorkbook.Worksheets.Add(dtEmpDetail, status);
wordsheet.Row(2).Height = 50;
wordsheet.Range("A1:d2").Merge();
}
answered Jan 17 at 6:34
Abdul KhaliqAbdul Khaliq
2,0694 gold badges26 silver badges31 bronze badges
Хитрости »
10 Август 2016 35697 просмотров
Подбор высоты строки/ширины столбца объединенной ячейки
Для начала немного теории. Если в ячейках листа 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 < (NewR_Height / ih) Then .RowHeight = NewR_Height / ih Else .RowHeight = OldR_Height End If 'возвращаем ширину столбца первой ячейки .Cells(1, 1).EntireColumn.ColumnWidth = OldC_Widht Else 'если необходимо изменить ширину столбца .EntireColumn.AutoFit NewC_Widht = .Cells(1).EntireColumn.ColumnWidth 'запоминаем ширину столбца .MergeCells = True If OldC_Widht < (NewC_Widht / iw) Then .ColumnWidth = NewC_Widht / iw Else .ColumnWidth = OldC_Widht End If 'возвращаем высоту строки первой ячейки .Cells(1, 1).RowHeight = OldR_Height End If End With End If End Function
Пара замечаний:
- т.к. нельзя выставить и автоширину и автовысоту — то функция подбирает либо высоту, либо ширину, что логично
- чтобы подбор по высоте ячеек сработал, для ячейки должен быть выставлен перенос строк(вкладка Главная -группа Выравнивание —Перенос текста). Если ячеек много и выставлять вручную лень — можно просто убрать апостроф перед точкой в строке:’.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, 3 476 скачиваний)
Если подобную операцию приходится производить постоянно — советую коды записать в надстройку: Как создать свою надстройку?. Так же можно воспользоваться уже готовым решением в составе MulTEx — Высота/Ширина объединенной ячейки.
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Чтобы изменить высоту строки на листе, большинство из нас может применить функцию «Высота строки», чтобы установить высоту выбранной строки. Однако, если у вас есть список чисел, и теперь вы хотите установить высоту строки на основе значений ячеек, как показано на следующем снимке экрана, как вы могли бы справиться с этой задачей в Excel?
Измените высоту строки на основе значения ячейки с кодом VBA
Измените высоту строки на основе значения ячейки с кодом VBA
Нет прямого способа изменить высоту нескольких строк на основе значения ячейки за один раз, но с помощью следующего кода VBA он может помочь вам завершить эту работу как можно быстрее.
1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: изменение высоты строки в зависимости от значения ячейки:
Sub rowheight()
'Updateby Extendoffice
Dim hgt As Variant
Dim WorkRng As Range
xTxt = ActiveWindow.RangeSelection.Address
Set WorkRng = Application.InputBox("please select the data range:", "Kutools for Excel", xTxt, , , , , 8)
For Each H In WorkRng
If H.Value > 15 Then
hgt = H.Value
H.EntireRow.Select
Selection.rowheight = hgt
End If
Next H
End Sub
3, Затем нажмите F5 нажмите клавишу для запуска этого кода, и появится диалоговое окно, напоминающее вам о выборе ячеек, для которых вы хотите установить высоту строки по значениям ячеек, см. снимок экрана:
4, Затем нажмите OK кнопка, высота строки была изменена на значение ячейки следующим образом:
Внимание: В приведенном выше коде VBA Если H.Value> 15, то указывает, что если значение ячейки больше 15, высота строки будет изменена, если значение ячейки меньше 15, высота строки останется высотой по умолчанию. Вы можете изменить его по своему усмотрению.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (0)
Оценок пока нет. Оцените первым!
{quote}{login=Ан13}{date=26.06.2008 02:24}{thema=Как изменить высоту строки в VB}{post}Ответьте пожалуйста на мой вопрос!!!{/post}{/quote}
Смотрите код.
Sub RowHeightFiting3()
‘ Объединённая ячейка должна быть активной!!!
‘ Если требуется подобрать высоту для неактивной ячейки, то нужно переменной MyRanAdr присвоить ПОЛНЫЙ адрес области объединённой ячейки ‘(Напр, MyRanAdr = «D4:G7» вместо строки MyRanAdr = ActiveCell.MergeArea.Address)
Application.ScreenUpdating = False
Dim MyNormalMiddleWidth, MyNormalEdgeWidth
Dim c1, c2, w1, w2 ‘временные переменные ширин столбцов в симв и пт
Dim MyTempCell As Range
Dim OldColWidth
Set MyTempCell = Cells(65536, 256)
OldColWidth = MyTempCell.ColumnWidth
c1 = 10 ‘ ширину в симв можно установить любую, но точно не менее 1 (где нельзя реально определить нужные нам данные),
c2 = 15 ‘ и лучше более 3 и целочисленные (для уменьшения влияния ошибки округления….. впрочем, в коде эта возможная ошибка учитывается)
MyTempCell.ColumnWidth = c1
c1 = MyTempCell.ColumnWidth
w1 = MyTempCell.Width
MyTempCell.ColumnWidth = c2
c2 = MyTempCell.ColumnWidth
w2 = MyTempCell.Width
MyNormalMiddleWidth = Format((w2 — w1) / (c2 — c1), «#0.00»)
MyNormalEdgeWidth = Format((c2 * w1 — c1 * w2) / (c2 — c1), «#0.00»)
MyTempCell.ColumnWidth = OldColWidth
Dim MyRanAdr As String
Dim MergeAreaTotalHeight, NewRH
Dim MergeAreaFirstCellColWidth, MergeAreaFirstCellColHeight
MyRanAdr = ActiveCell.MergeArea.Address ‘адрес области с объединённой ячейкой
MergeAreaTotalHeight = Range(MyRanAdr).Height ‘ высота всей объединённой ячейки в ед. пт
MergeAreaFirstCellColWidth = Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth ‘ ширина первого столбца в объединённой ячейке
MergeAreaFirstCellColHeight = Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight ‘ высота первой строки в объединённой ячейке
Range(MyRanAdr).Cells(1, 1).ColumnWidth = (Range(MyRanAdr).Width — MyNormalEdgeWidth) / MyNormalMiddleWidth ‘установка ширины первого столбца объед. ячейки равной общей ширине объед. ячейки »’БЕЗ ПОДГОНКИ!!!
Range(MyRanAdr).WrapText = True
Range(MyRanAdr).MergeCells = False
Range(MyRanAdr).Cells(1, 1).EntireRow.AutoFit
NewRH = Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight
Range(MyRanAdr).MergeCells = True
Range(MyRanAdr).Cells(1, 1).EntireColumn.ColumnWidth = MergeAreaFirstCellColWidth
If NewRH < MergeAreaTotalHeight Then ‘если новая высота меньше изначальной, то оставляем изначальную высоту!
Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight = MergeAreaFirstCellColHeight
Else
Range(MyRanAdr).Cells(1, 1).EntireRow.RowHeight = NewRH — (MergeAreaTotalHeight — MergeAreaFirstCellColHeight) ‘ для 1st строки в объед.ячейке
End If
‘Range(MyRanAdr).EntireRow.RowHeight = NewRH / Range(MyRanAdr).Rows.Count ‘для равной высоты всех строк в объед.ячейке (вместо предыдущего блока If)
Application.ScreenUpdating = True
End Sub
19 / 19 / 0 Регистрация: 30.09.2011 Сообщений: 283 |
|
1 |
|
Поменять высоту строк/ширину столбцов в каждом листе рабочей книги24.12.2012, 13:59. Показов 8210. Ответов 4
Добрый день! всех с наступающими праздниками )) и собственно сам вопрос по теме: как поочередно (или сразу во всей книге) на каждой вкладке поменять высоту строк на заданную.. к примеру на 15 пунктов.. и поменять ширину второго столбца на 40 пунктов? спасибо!
0 |
Novichek =) 537 / 28 / 4 Регистрация: 25.04.2011 Сообщений: 238 |
||||
24.12.2012, 16:09 |
2 |
|||
И Вас с наступающими! Пробуйте макрорекодер, такое он на раз пишет.
1 |
caustic 19 / 19 / 0 Регистрация: 30.09.2011 Сообщений: 283 |
||||||||
24.12.2012, 16:46 [ТС] |
3 |
|||||||
Novichek =), спасибо. но пока ждал ответа, сам обмозговал ) у меня получилось так:
Добавлено через 31 минуту можно ли как то видоизменить макрос, обойдя действие .Select по каждому листу. что-то вроде этого:
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
24.12.2012, 18:46 |
4 |
|||
Лучше уж так:
1 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
24.12.2012, 19:48 |
5 |
|||
Либо циклом и без селектов, либо без цикла, но с селектами
2 |