Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
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_W возвращаем высоту строки первой ячейки .Cells(1, 1).RowHeight = OldR_Height End If End With End If End Function

  • т.к. нельзя выставить и автоширину и автовысоту — то функция подбирает либо высоту, либо ширину, что логично
  • чтобы подбор по высоте ячеек сработал, для ячейки должен быть выставлен перенос строк(вкладка Главная -группа ВыравниваниеПеренос текста). Если ячеек много и выставлять вручную лень — можно просто убрать апостроф перед точкой в строке: ‘ .WrapText = True ‘раскомментировать, если необходимо принудительно выставлять перенос текста тогда код сам проставит переносы. Но тут следует учитывать, что в данном случае перенос будет выставлен для всех ячеек, что не всегда отвечает условиям
  • функция подбирает высоту и ширину исключительно для объединенных ячеек. Если ячейка не объединена — код оставит её без изменений
Читать еще:  Условия в vba excel

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

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 836 скачиваний)

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

Автоподбор высоты строки, объединенных по вертикали ячеек средствами VBA

Доброго времени суток!

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

Есть ли в Excel возможность средствами VBA автоматически подобрать высоту строки таким образом, чтобы в объединенных строках (ячейках по вертикали) текст был читаемым.

Прикладываю рисунок (справа ожидание, слева реальность).
Так же прикладываю электронную таблицу.

Вложения

Visual Basic
пробный для форума.xlsx (9.8 Кб, 3 просмотров)
12.11.2018, 17:37

Выравнивание высоты объединённых ячеек Excel по их содержимому. AutoFit для объединённых ячеек Excel.
В ячейку вставляется очень длинный текст, который при печати просто не виден. Нужно, чтобы.

Автоподбор ширины и высоты ячеек Excel
Добрый день, возникла проблема с работой из VB в excel. Проблема в следующем: 1. Из VB.

Автоподбор высоты строки в диапазоне
Добрый день! Необходимо сделать следующее: Если какой-либо ячейке из диапазона A1:C50 количество.

Как сделать автоподбор высоты строки в Excel
Добрый вечер. Столкнулся с такой бедой, в объединенную ячейку Excel вставляю текст, у ячейку.

15.11.2018, 16:55 [ТС]2

Наткунлся на схожую тему AutoFit объединённой ячейки. ColumnWidth и Columns(n).Width созданнуюtolikt
Предложенный вариант решения немного адаптировал под свою задачу, однако не получается реализовать одну из задумок.

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

Предположительный алгоритм таков

If HeighN>HeighG And HeighN>HeighF And HeighN/CountRows>HeighRow Then
newHeighRow = HeighN/CountRows
ElseIf HeighG >HeighN And HeighG >HeighF And HeighG/CountRows>HeighRow Then
newHeighRow = HeighG/CountRows
ElseIf HeighF>HeighN And HeighF>HeighG And HeighF/CountRows>HeighRow Then
newHeighRow = HeighF/CountRows

HeighN — Высота объединенной ячейки столбца N
HeighG — Высота объединенной ячейки столбца G
HeighF — Высота объединенной ячейки столбца F
HeighRow — Высота строки
newHeighRow — Новая высота строки
CountRows — Количество строк в объединенной ячейки

Попытка реализации описанного алгоритма не увенчалась успехом, поэтому прошу помощи умов сего ресурса.

Excel VBA calculate height of row

I have several rows in a workbook that I am working on that require both merged columns, and merged rows. For this reason, Excel’s auto fit does me no good. It is also possible, and probable, that at some point these will need to expand beyond Excel’s 409.5pt limit for row height.

For this reason, I am looking for a way to calculate the total necessary height of a set of rows so they will fit a block of text properly using VBA.

How can I calculate the necessary row height to fit a block of text, knowing that it will exceed 409.5pt? The font size and cell width will be constant, so that can be used to calculate it necessary.

Создан 28 июл. 14 2014-07-28 20:51:24 Butters

A few questions. Why not just wrap the text since you are fixing the width? Also what do you plan on doing if your block exceeds the maximum height? – engineersmnky 28 июл. 14 2014-07-28 20:56:40

The text is wrapped, that is what causes it to exceed the height. If it does exceed the height, I can take the calculated height, say 1000pt, and create 3 rows, [email protected], and [email protected], then merge them, all dynamically with VBA. This will then show the full text. – Butters 28 июл. 14 2014-07-28 20:59:07

Why use *cells* when a *shape* (like a TextBox) would seem to solve all of these problems, including the limitation on row height. – David Zemens 29 июл. 14 2014-07-29 01:48:37

@DavidZemens Is there a way to auto size a text box, while keeping it from overlapping or covering the text/formulas/data below it in the sheet? – Butters 29 июл. 14 2014-07-29 14:08:29

@engineersmnky Forgot to tag you yesterday. See above. – Butters 29 июл. 14 2014-07-29 14:09:16

@Butters if you have conditions, then you can’t auto-size, you need to define some criteria/logic by which the shape will be sized. Yes, it can be done, but it can’t be done with the native «Auto-size shape to fit text» option. – David Zemens 29 июл. 14 2014-07-29 17:18:05

@DavidZemens Thanks, I’m working on a solution now that autosizes the text box, and then sizes the cells around it to match. – Butters 29 июл. 14 2014-07-29 17:50:40

1 ответ

12pt font is like 1/6″, i.e., there are 72 points in an inch. using your font size, you should be able to come up with an algorithm that reasonably approximates the necessary row height.

Use something like this to print a list of font sizes & row heights, and use the results to come up with your conversion formula.

W >i is much narrower than W in many fonts), although there are some functions out there which will calculate the width of each individual character for common fonts.

Создан 29 июл. 14 2014-07-29 01:59:37 David Zemens

@z̫͋ «Point» is a unit of measurement used in typography that is equal to 1/72 inch. It is used primarily for representing the height of characters and the amount of space between lines, also known as leading. http://support.microsoft.com/kb/76388 – David Zemens 29 июл. 14 2014-07-29 13:59:27

@z̫͋ David Zemens is correct «Point» is different than «Pixel» – engineersmnky 29 июл. 14 2014-07-29 14:12:51

Ссылка на основную публикацию
Adblock
detector