Excel расширить ячейки по содержимому vba

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

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

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

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

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

Высота строки и ширина столбца в 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 не работает, смотрите в следующей статье.

myth

1

Как расширить ячейку по размеру данных?

09.02.2011, 12:22. Показов 5388. Ответов 7


Студворк — интернет-сервис помощи студентам

Добрый день. У нас такая проблемка: мы экспортируем в Exel данные в ячейку.
Далее объединяем этй ячейку с соседней и переносим по словам, так вот если длинное слово/предложение, exel почему-то не расширяем ячейку и невидно всех данных. Как справиться с этим?

Димит

90 / 37 / 14

Регистрация: 03.11.2010

Сообщений: 429

09.02.2011, 14:36

2

Можно так:

Visual Basic
1
2
Range('C6').Rows.AutoFit
Range('C6').Columns.AutoFit



0



myth

09.02.2011, 15:20

3

Не получается, эффект тот же.

myth

09.02.2011, 15:24

4

Для необъединенных ячеек действует, для объединенных нет

Димит

90 / 37 / 14

Регистрация: 03.11.2010

Сообщений: 429

09.02.2011, 17:35

5

Действительно не работает.
Эта химия работать будет:

Visual Basic
1
2
3
4
5
6
7
8
Range('Z2').Value = Range('B2:J3').Value
Range('Z2').WrapText = False
Range('Z2').Columns.AutoFit
Range('Z2').WrapText = True
Range('Z2').Columns.AutoFit
Range('Z2').Rows.AutoFit
Range('B2:J3').ColumnWidth = Range('Z2').ColumnWidth / Range('B2:J3').Columns.Count
Range('B2:J3').RowHeight = Range('Z2').RowHeight / Range('B2:J3').Rows.Count

Но наверно можно и по лутше



0



myth

10.02.2011, 09:12

6

Я наверное не очень правильно объяснила.
В Excele я сделала из 2-ух ячеек одну и вот эту одну надо расширить по размеру данных.
Хотя мне кажется Дмит Вы навели меня на мысль. Попробую сейчас, если не получиться — буду опять просить помощи.
Большое спасибо Дмит за отзывчивость. :-)

90 / 37 / 14

Регистрация: 03.11.2010

Сообщений: 429

10.02.2011, 17:50

7

Из кода видна идея (может быть и не очень)
1. Переносим Текст из объединённой ячейки в одну (Z2)
2. Методом AutoFit изменяем её размеры под текст.
3. Изменяем размеры объединённой ячейки до размеров ячейки Z2.
Замечание — все столбцы (строки) объединённой ячейки становятся равны по ширине (высоте).
Поделись своей мыслью — мне будет интересно.



0



Искатель

10.02.2011, 19:40

8

Ну, типа, считается, что если ячейки объединены, то автоматом нельзя решить какую из строк или столбцов расширять. Вот только даже если объединённые ячейки на одной строке, он всё равно строку не расширяет.
Кстати, лучше не использовать для временных данных ячейки типа ‘zz1000’, так как в этом случае при сохранении получится огромный размер файла — он сохранит форматы всех ячеек в диапазоне ‘a1:zz1000’. Лучше сохранить размеры ячейки до объединения, вставить текст, померять размер, вернуть старый размер, объединить и присвоить померянный.

Home / VBA / VBA AutoFit (Rows, Column, or the Entire Worksheet)

Key Points

  • In VBA, you can use the AutoFit method to auto-fit rows, columns, and even an entire worksheet.
  • You need to specify the range, and then you can use the AutoFit method.

Let’s say you want to autofit column A, the code would be something like below:

Range("A1").EntireColumn.AutoFit

In the above line of code, you have used the EntireColumn property to refer to the entire column of cell A1.

As you are within a worksheet so you can also use the columns property and write a code like the below.

Columns(1).AutoFit

AutoFit a Row

In the same way, you can write code to autofit a row. Let’s say you want to autofit row 5, the code would be:

Range("A5").EntireRow.AutoFit

And if you want to use the row property, then you can use the code like the following.

Rows(5).AutoFit

AutoFit UsedRange (Rows and Columns)

Now let’s say, you only want to autofit those columns and rows where you have data. In VBA, there is a property called used range that you can use. So the code would be.

ActiveSheet.UsedRange.EntireColumn.AutoFit

ActiveSheet.UsedRange.EntireRow.AutoFit

And if you want to use a specific worksheet then the code would be.

Worksheets("Sheet1").UsedRange.EntireColumn.AutoFit
Worksheets("Sheet1").UsedRange.EntireRow.AutoFit

AutoFit Entire Worksheet

And if you want to refer to all the columns and rows of the worksheet then you can use the “CELLS” property. Here’s the code.

Worksheets("Sheet1").Cells.EntireColumn.AutoFit
Worksheets("Sheet1").Cells.EntireRow.AutoFit

Or you can also use VBA’s WITH statement to write a code like the below.

With Worksheets("Sheet1").Cells
    .EntireColumn.AutoFit
    .EntireRow.AutoFit
End With

More Tutorials

    • Count Rows using VBA in Excel
    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Apply Borders on a Cell using VBA in Excel
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • ActiveCell in VBA in Excel
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Copy Range to Another Sheet + Workbook
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    Return to VBA Code Examples

    In this Article

    • Set Column Width with VBA
    • Set Row Height with VBA
    • Autofit Column Width
    • Autofit Row Height
    • Set Cell Width
    • Set Cell Height
    • Obtain Column Width
    • Obtain Row Height
    • VBA Coding Made Easy

    This tutorial will demonstrate how to set row height and column widths using VBA.

    Excel Row heights and Columns widths can be changed in VBA by setting the .RowHeight and .ColumnWidth properties.

    Set Column Width with VBA

    Macro to set the column width of Columns A to E:

    Sub Column_Width()
        Columns("A:E").ColumnWidth = 30
    End Sub

    Set Row Height with VBA

    Macro to set the row height of Row 1:

    Sub RowHeight()
        Rows("1:1").RowHeight = 30
    End Sub

    Autofit Column Width

    Excel offers the ability to “Autofit” column widths. This feature adjusts the column width so that the column(s) is wide enough to fit all text found in that column.
    vba autofit column width
    To Autofit column widths in VBA:

    Columns("A:B").Autofit

    We wrote more about this in another article on how to Autofit a Column from VBA, including how to Autofit all used columns.

    Autofit Row Height

    You can also autofit row heights using a similar method:

    Rows("1:2").Autofit

    Set Cell Width

    You can also adjust column widths by referencing a cell:

    Range("a1").EntireColumn.ColumnWidth = 20

    Set Cell Height

    Or adjust row heights by referencing a cell:

    Range("a1").EntireRow.RowHeight = 10

    Obtain Column Width

    To obtain the column width of a column:

    dim iColumnWidth as long
    iColumnWidth = columns("a").ColumnWidth

    Note: This will return Null if all columns in the range do not have the same width.

    Obtain Row Height

    Similarly, you can obtain the row height:

    dim iRowHeight as long
    iRowHeight = rows("1").RowHeight

    VBA Coding Made Easy

    Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

    vba set column width

    Learn More!

    <<Return to VBA Examples

    Хитрости »

    10 Август 2016              35664 просмотров


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

    Для начала немного теории. Если в ячейках листа 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 расчет сдельной заработной платы
  • Excel расширенный фильтр формулы
  • Excel расчет с использованием формул
  • Excel расширенный фильтр с несколькими условиями
  • Excel расчет рациона кормления