Vba excel автоширина столбца

Изменение размера ячейки в 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 не работает, смотрите в следующей статье.

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

    After you manipulate a worksheet with VBA it may be necessary to Autofit your columns to present the nicest end result possible. Here’s how to autofit columns using VBA.

    Autofit Column using VBA

    This code autofits columns A and B. The autofit is applied to the active sheet.

    Columns("A:B").EntireColumn.Autofit

    Autofit All Used Columns

    What if you want to Autofit all of the used columns in a worksheet? Use the above method in combination with Count the Number of Used Columns, and a loop.

    The following code autofits all used columns using VBA:

    
    Sub AutofitAllUsed()
    
    Dim x As Integer
    
    For x = 1 To ActiveSheet.UsedRange.Columns.Count
    
         Columns(x).EntireColumn.autofit
    
    Next x
    
    End Sub

    vba-free-addin

    VBA Code Examples Add-in

    Easily access all of the code examples found on our site.

    Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

    (No installation required!)

    Free Download

    Excel VBA Tutorial about Column Width Setting or AutofittingIn this VBA Tutorial, you learn how to use Excel VBA to set or autofit the width of columns in a variety of circumstances.

    This VBA Tutorial is accompanied by Excel workbooks containing the data and macros I use in the examples below. You can get immediate free access to these example workbooks by subscribing to the Power Spreadsheets Newsletter.

    Use the following Table of Contents to navigate to the section you’re interested in.

    Related VBA and Macro Tutorials

    The following VBA and Macro Tutorials may help you better understand and implement the contents below:

    • General VBA constructs and structures:
      • Learn about using variables here.
      • Learn about VBA data types here.
      • Learn about R1C1 and A1 style references here.
    • Practical VBA applications and macro examples:
      • Learn how to work with worksheets here.
      • Learn how to delete columns here.
      • Learn how to hide or unhide rows and columns here.

    You can find additional VBA and Macro Tutorials in the Archives.

    #1: Set Column Width

    VBA Code to Set Column Width

    To set the width of a column with VBA, use a statement with the following structure:

    Worksheet.Range("A1CellReference").ColumnWidth = ColumnWidthUnits
    

    Process Followed by VBA Code

    Identify cell in column to set width for data-lazy-srcset= Specify column width in units” width=”316″ height=”102″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the column containing the Range object returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the column containing the Range object returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of column A of the worksheet named “Column width” to 15 units.

    Sub columnWidth()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Worksheets("Column width").Range("A5").columnWidth = 15
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column A to 15 units.

    Macro sets column width

    #2: Set Column Width for Multiple Contiguous Columns

    VBA Code to Set Column Width for Multiple Contiguous Columns

    To set the width of multiple contiguous columns with VBA, use a statement with the following structure:

    Worksheet.Range("FirstColumnLetter:LastColumnLetter").ColumnWidth = ColumnWidthUnits
    

    Process Followed by VBA Code

    Identify columns to set width for data-lazy-srcset= Specify column width in units” width=”312″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“FirstColumnLetter:LastColumnLetter”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing the columns whose width you set. Under this syntax:
        • You identify columns by the letters of their headers (FirstColumnLetter and LastColumnLetter).
        • The column letters are:
          • Separated by a colon (:), which allows you to set up an array.
          • Enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the columns returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the columns returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of columns C through E (C, D and E) of the worksheet named “Column width” to 10 units.

    Sub columnWidthMultipleColumns()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Worksheets("Column width").Range("C:E").columnWidth = 10
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of columns C through E to 10 units.

    Macro sets column width for multiple columns

    #3: Set Column Width for Multiple Non-Contiguous Columns

    VBA Code to Set Column Width for Multiple Non-Contiguous Columns

    To set the width of multiple non-contiguous columns with VBA, use a statement with the following structure:

    Worksheet.Range("Column1Area1Letter:ColumnLastArea1Letter,Column1Area2Letter:ColumnLastArea2Letter, ... , Column1AreaLastLetter:ColumnLastAreaLastLetter").ColumnWidth = ColumnWidthUnits
    

    Process Followed by VBA Code

    Identify columns to set width for data-lazy-srcset= Specify column width in units” width=”312″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“Column1Area1Letter:ColumnLastArea1Letter,Column1Area2Letter:ColumnLastArea2Letter, … , Column1AreaLastLetter:ColumnLastAreaLastLetter”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing the columns whose width you set. Under this syntax:
        • You identify columns by the letters of their headers (Column1Area1Letter, ColumnLastArea1Letter, Column1Area2Letter, ColumnLastArea2Letter, … , Column1AreaLastLetter and ColumnLastAreaLastLetter”).
        • The column letters identifying contiguous columns (within the same data area) are separated by a colon (:), which allows you to set up an array. If you’re only referring to a single column (for example, column B), include the letter reference twice and separate them with a colon (:) (for example “B:B”).
        • The column letters identifying non-contiguous columns (in separate data areas) are separated by the union operator, a comma (,).
        • The complete column reference is enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the columns returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the columns returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of columns B, F and H of the worksheet named “Column width” to 20 units.

    Sub columnWidthMultipleNonAdjacentColumns()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Worksheets("Column width").Range("B:B,F:F,H:H").columnWidth = 20
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of columns B, F and H to 20 units.

    Macro sets column width for multiple non-contiguous columns

    #4: AutoFit Column Width Based on Entire Column

    VBA Code to AutoFit Column Width Based on Entire Column

    To autofit the width of a column with VBA, considering the contents of the entire column, use a statement with the following structure:

    Worksheet.Range("A1CellReference").EntireColumn.AutoFit
    

    Process Followed by VBA Code

    Identify cell data-lazy-srcset= return entire column > autofit entire column width” width=”497″ height=”107″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column you autofit. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: EntireColumn.
      • VBA Construct: Range.EntireColumn property.
      • Description: Returns a Range object representing the entire column containing the Range object returned by item #2 above.
    4. Item: AutoFit.
      • VBA Construct: Range.AutoFit method.
      • Description: Modifies the width of the column represented by the Range object returned by item #3 above to achieve the best fit (autofits).

    Macro Example

    The following macro autofits the width of column G of the worksheet named “Column width” based on the contents of all the cells in the entire column.

    Sub columnWidthAutoFitEntireColumn()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Worksheets("Column width").Range("G5").EntireColumn.AutoFit
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA autofits the width of column G based on the contents of all the cells in the entire column. Notice the contents in cell G10 (Autofit based on entire column), which are used as the basis for the autofitting operation.

    Macro autofits column width based on entire column

    #5: AutoFit Column Width Based on Specific Cell

    VBA Code to AutoFit Column Width Based on Specific Cell

    To autofit the width of a column with VBA, considering the contents of a specific cell or row, use a statement with the following structure:

    Worksheet.Range("A1CellReference").Columns.AutoFit
    

    Process Followed by VBA Code

    Identify cell data-lazy-srcset= return column > autofit entire column width to contents of cell” width=”493″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell.
        • This cell:
          • Is within the column you autofit.
          • Is the cell whose contents Excel considers for purposes of achieving the best fit (autofitting).
        • You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: Columns.
      • VBA Construct: Range.Columns property.
      • Description: Returns a Range object representing the column containing the Range object returned by item #2 above.
    4. Item: AutoFit.
      • VBA Construct: Range.AutoFit method.
      • Description: Modifies the width of the column represented by the Range object returned by item #3 above to achieve the best fit (autofits) based on the contents within the cell represented by the Range object returned by item #2 above.

    Macro Example

    The following macro autofits the width of column I of the worksheet named “Column width” based on the contents of cell I5.

    Sub columnWidthAutoFitRow()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Worksheets("Column width").Range("I5").Columns.AutoFit
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets autofits the width of column I based on the contents of cell I5. Notice the contents in cell I10 (Autofit based on specific cell), which aren’t used as the basis for the autofitting operation.

    Macro autofits column width based on cell contents

    #6: Set Column Width in Points

    VBA Code to Set Column Width in Points

    To set the width of a column in points with VBA, use a macro with the following statement structure:

    With Worksheet.Range("A1CellReference")
        For Counter = 1 To 3
            .ColumnWidth = ColumnWidthPoints * (.ColumnWidth / .Width)
        Next Counter
    End With
    

    Process Followed by VBA Code

    Identify cell data-lazy-srcset= specify column width in points 3 times” width=”689″ height=”192″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in points without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = ColumnWidthPoints * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: ColumnWidthPoints.
      • VBA Construct: Numeric (for example, Double) variable.
      • Description: Specifies the width (in points) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthPoints, use a numeric data type that can handle the value you use to specify the column width in points.
    3. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    4. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    5. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #3 above) and Width (item #4 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in points (item #2 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts ColumnWidthPoints from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column J of the worksheet named “Column width” to 80 points.

    Sub columnWidthPoints()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Dim iCounter As Long
    
        With Worksheets("Column width").Range("J5")
            For iCounter = 1 To 3
                .columnWidth = 80 * (.columnWidth / .Width)
            Next iCounter
        End With
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column J to 80 points.

    Macro sets column width in points

    #7: Set Column Width in Inches

    VBA Code to Set Column Width in Inches

    To set the width of a column in inches with VBA, use a macro with the following statement structure:

    With Worksheet.Range("A1CellReference")
        For Counter = 1 To 3
            .ColumnWidth = Application.InchesToPoints(ColumnWidthInches) * (.ColumnWidth / .Width)
        Next Counter
    End With
    

    Process Followed by VBA Code

    Identify cell data-lazy-srcset= specify column width in inches 3 times” width=”686″ height=”191″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in inches without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = Application.InchesToPoints(ColumnWidthInches) * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: Application.InchesToPoints.
      • VBA Construct: Application.InchesToPoints method.
      • Description: Converts the measurement specified by item #3 below from inches to points.
    3. Item: ColumnWidthInches.
      • VBA Construct: Inches parameter of Application.InchesToPoints method.
      • Description: Specifies the width (in inches) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthInches, use a numeric data type that can handle the value you use to specify the column width in inches.
    4. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    5. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    6. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #4 above) and Width (item #5 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in inches/points (items #2 and #3 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts Application.InchesToPoints(ColumnWidthInches) from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column K of the worksheet named “Column width” to 1 inch.

    Sub columnWidthInches()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Dim iCounter As Long
    
        With Worksheets("Column width").Range("K5")
            For iCounter = 1 To 3
                .columnWidth = Application.InchesToPoints(1) * (.columnWidth / .Width)
            Next iCounter
        End With
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column K to 1 inch.

    Macro sets column width in inches

    #8: Set Column Width in Centimeters

    VBA Code to Set Column Width in Centimeters

    To set the width of a column in centimeters with VBA, use a macro with the following statement structure:

    With Worksheet.Range("A1CellReference")
        For Counter = 1 To 3
            .ColumnWidth = Application.CentimetersToPoints(ColumnWidthCentimeters) * (.ColumnWidth / .Width)
        Next Counter
    End With
    

    Process Followed by VBA Code

    Identify cell data-lazy-srcset= specify column width in centimeters 3 times” width=”683″ height=”192″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in centimeters without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = Application.CentimetersToPoints(ColumnWidthCentimeters) * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: Application.CentimetersToPoints.
      • VBA Construct: Application.CentimetersToPoints method.
      • Description: Converts the measurement specified by item #3 below from centimeters to points.
    3. Item: ColumnWidthCentimeters.
      • VBA Construct: Centimeters parameter of Application.CentimetersToPoints method.
      • Description: Specifies the width (in centimeters) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthCentimeters, use a numeric data type that can handle the value you use to specify the column width in centimeters.
    4. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    5. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    6. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #4 above) and Width (item #5 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in centimeters/points (items #2 and #3 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts Application.CentimetersToPoints(ColumnWidthCentimeters) from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column L of the worksheet named “Column width” to 1 centimeter.

    Sub columnWidthCentimeters()
    
        'Source: https://powerspreadsheets.com/
        'For further information: https://powerspreadsheets.com/excel-vba-column-width/
    
        Dim iCounter As Long
    
        With Worksheets("Column width").Range("L5")
            For iCounter = 1 To 3
                .columnWidth = Application.CentimetersToPoints(1) * (.columnWidth / .Width)
            Next iCounter
        End With
    
    End Sub
    

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column L to 1 centimeter.

    Macro sets column width in centimeters

    Содержание

    1. VBA – Autofit Columns
    2. Autofit Column using VBA
    3. Autofit All Used Columns
    4. VBA Code Examples Add-in
    5. VBA Code Generator
    6. AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
    7. What is AutoMacro?
    8. VBA Excel. Размер ячейки (высота строки, ширина столбца)
    9. Размер ячейки
    10. Высота строки
    11. Ширина столбца
    12. Автоподбор ширины
    13. VBA AutoFit (Rows, Column, or the Entire Worksheet)
    14. Key Points
    15. AutoFit a Column
    16. AutoFit a Row
    17. AutoFit UsedRange (Rows and Columns)
    18. AutoFit Entire Worksheet
    19. Excel VBA Column Width: Step-by-Step Guide and 8 Code Examples to Set or AutoFit the Column Width with Macros
    20. Related VBA and Macro Tutorials
    21. #1: Set Column Width
    22. VBA Code to Set Column Width
    23. Process Followed by VBA Code
    24. VBA Statement Explanation
    25. Macro Example
    26. Effects of Executing Macro Example
    27. #2: Set Column Width for Multiple Contiguous Columns
    28. VBA Code to Set Column Width for Multiple Contiguous Columns
    29. Process Followed by VBA Code
    30. VBA Statement Explanation
    31. Macro Example
    32. Effects of Executing Macro Example
    33. #3: Set Column Width for Multiple Non-Contiguous Columns
    34. VBA Code to Set Column Width for Multiple Non-Contiguous Columns
    35. Process Followed by VBA Code
    36. VBA Statement Explanation
    37. Macro Example
    38. Effects of Executing Macro Example
    39. #4: AutoFit Column Width Based on Entire Column
    40. VBA Code to AutoFit Column Width Based on Entire Column
    41. Process Followed by VBA Code
    42. VBA Statement Explanation
    43. Macro Example
    44. Effects of Executing Macro Example
    45. #5: AutoFit Column Width Based on Specific Cell
    46. VBA Code to AutoFit Column Width Based on Specific Cell
    47. Process Followed by VBA Code
    48. VBA Statement Explanation
    49. Macro Example
    50. Effects of Executing Macro Example
    51. #6: Set Column Width in Points
    52. VBA Code to Set Column Width in Points
    53. Process Followed by VBA Code
    54. VBA Statement Explanation
    55. Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
    56. Lines #2 and #4: For Counter = 1 To 3 | Next Counter
    57. Line #3: .ColumnWidth = ColumnWidthPoints * (.ColumnWidth / .Width)
    58. Macro Example
    59. Effects of Executing Macro Example
    60. #7: Set Column Width in Inches
    61. VBA Code to Set Column Width in Inches
    62. Process Followed by VBA Code
    63. VBA Statement Explanation
    64. Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
    65. Lines #2 and #4: For Counter = 1 To 3 | Next Counter
    66. Line #3: .ColumnWidth = Application.InchesToPoints(ColumnWidthInches) * (.ColumnWidth / .Width)
    67. Macro Example
    68. Effects of Executing Macro Example
    69. #8: Set Column Width in Centimeters
    70. VBA Code to Set Column Width in Centimeters
    71. Process Followed by VBA Code
    72. VBA Statement Explanation
    73. Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
    74. Lines #2 and #4: For Counter = 1 To 3 | Next Counter
    75. Line #3: .ColumnWidth = Application.CentimetersToPoints(ColumnWidthCentimeters) * (.ColumnWidth / .Width)
    76. Macro Example
    77. Effects of Executing Macro Example

    VBA – Autofit Columns

    After you manipulate a worksheet with VBA it may be necessary to Autofit your columns to present the nicest end result possible. Here’s how to autofit columns using VBA.

    Autofit Column using VBA

    This code autofits columns A and B. The autofit is applied to the active sheet.

    Autofit All Used Columns

    What if you want to Autofit all of the used columns in a worksheet? Use the above method in combination with Count the Number of Used Columns, and a loop.

    The following code autofits all used columns using VBA:

    VBA Code Examples Add-in

    Easily access all of the code examples found on our site.

    Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

    (No installation required!)

    VBA Code Generator

    AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!

    What is AutoMacro?

    AutoMacro is an add-in for VBA that installs directly into the Visual Basic Editor. It comes loaded with code generators, an extensive code library, the ability to create your own code library, and many other time-saving tools and utilities that add much needed functionality to the outdated VBA Editor.

    Источник

    VBA Excel. Размер ячейки (высота строки, ширина столбца)

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

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

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

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

    Высота строки и ширина столбца в Excel

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

    На сайте поддержки офисных приложений Microsoft так написано об этих величинах:

    • высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
    • ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.

    Смотрите, как сделать все ячейки рабочего листа квадратными.

    Высота строки

    Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.

    Примеры изменения высоты строк:

    Пример 1
    Изменение высоты отдельной ячейки:

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

    Пример 2
    Изменение высоты строки:

    в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.

    Пример 3
    Изменение высоты ячеек заданного диапазона:

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

    Пример 4
    Изменение высоты ячеек целого столбца:

    в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.

    Ширина столбца

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

    Примеры изменения ширины столбцов:

    Пример 1
    Изменение ширины отдельной ячейки:

    в результате, столбец, в котором находится активная ячейка, приобретает ширину, равную 15 символам.

    Пример 2
    Изменение ширины столбца:

    в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.

    Пример 3
    Изменение ширины ячеек заданного диапазона:

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

    Пример 4
    Изменение ширины ячеек целой строки:

    в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.

    Автоподбор ширины

    Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:

    Источник

    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.

    AutoFit a Column

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

    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.

    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:

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

    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.

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

    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.

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

    Источник

    Excel VBA Column Width: Step-by-Step Guide and 8 Code Examples to Set or AutoFit the Column Width with Macros

    In this VBA Tutorial, you learn how to use Excel VBA to set or autofit the width of columns in a variety of circumstances.

    This VBA Tutorial is accompanied by Excel workbooks containing the data and macros I use in the examples below. You can get immediate free access to these example workbooks by subscribing to the Power Spreadsheets Newsletter.

    Use the following Table of Contents to navigate to the section you’re interested in.

    Table of Contents

    The following VBA and Macro Tutorials may help you better understand and implement the contents below:

    • General VBA constructs and structures:
      • Learn about using variables here.
      • Learn about VBA data types here.
      • Learn about R1C1 and A1 style references here.
    • Practical VBA applications and macro examples:
      • Learn how to work with worksheets here.
      • Learn how to delete columns here.
      • Learn how to hide or unhide rows and columns here.

    You can find additional VBA and Macro Tutorials in the Archives.

    #1: Set Column Width

    VBA Code to Set Column Width

    To set the width of a column with VBA, use a statement with the following structure:

    Process Followed by VBA Code

    Specify column width in units” width=”316″ height=”102″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the column containing the Range object returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the column containing the Range object returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of column A of the worksheet named “Column width” to 15 units.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column A to 15 units.

    #2: Set Column Width for Multiple Contiguous Columns

    VBA Code to Set Column Width for Multiple Contiguous Columns

    To set the width of multiple contiguous columns with VBA, use a statement with the following structure:

    Process Followed by VBA Code

    Specify column width in units” width=”312″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“FirstColumnLetter:LastColumnLetter”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing the columns whose width you set. Under this syntax:
        • You identify columns by the letters of their headers (FirstColumnLetter and LastColumnLetter).
        • The column letters are:
          • Separated by a colon (:), which allows you to set up an array.
          • Enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the columns returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the columns returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of columns C through E (C, D and E) of the worksheet named “Column width” to 10 units.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of columns C through E to 10 units.

    #3: Set Column Width for Multiple Non-Contiguous Columns

    VBA Code to Set Column Width for Multiple Non-Contiguous Columns

    To set the width of multiple non-contiguous columns with VBA, use a statement with the following structure:

    Process Followed by VBA Code

    Specify column width in units” width=”312″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item:Range(“Column1Area1Letter:ColumnLastArea1Letter,Column1Area2Letter:ColumnLastArea2Letter, … , Column1AreaLastLetter:ColumnLastAreaLastLetter”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing the columns whose width you set. Under this syntax:
        • You identify columns by the letters of their headers (Column1Area1Letter, ColumnLastArea1Letter, Column1Area2Letter, ColumnLastArea2Letter, … , Column1AreaLastLetter and ColumnLastAreaLastLetter”).
        • The column letters identifying contiguous columns (within the same data area) are separated by a colon (:), which allows you to set up an array. If you’re only referring to a single column (for example, column B), include the letter reference twice and separate them with a colon (:) (for example “B:B”).
        • The column letters identifying non-contiguous columns (in separate data areas) are separated by the union operator, a comma (,).
        • The complete column reference is enclosed within quotations (“”).
    3. Item: ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description: Sets the width of the columns returned by item #2 above.
    4. Item: ColumnWidthUnits.
      • VBA Construct: New value of the Range.ColumnWidth property.
      • Description: Specifies the width, in units, of the columns returned by item #2 above.
        • Column width isn’t measured in points, centimeters or inches. Excel measures column width units based on the size (width) of the font you use in the Normal style (for example, Calibri 11).
        • Therefore, 1 unit of column width is equal to 1 character of the Normal style font. Consider the following:
          • If your Normal style font is a fixed-width font, such as Courier New or Consolas, all characters have the same width.
          • If your Normal style font is a proportional font, Excel considers the width of the character “0” (the number zero).
        • If you explicitly declare a variable to represent ColumnWidthUnits, use a numeric data type that can handle the value you use to specify the column width in the appropriate units.

    Macro Example

    The following macro sets the width of columns B, F and H of the worksheet named “Column width” to 20 units.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of columns B, F and H to 20 units.

    #4: AutoFit Column Width Based on Entire Column

    VBA Code to AutoFit Column Width Based on Entire Column

    To autofit the width of a column with VBA, considering the contents of the entire column, use a statement with the following structure:

    Process Followed by VBA Code

    return entire column > autofit entire column width” width=”497″ height=”107″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column you autofit. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: EntireColumn.
      • VBA Construct: Range.EntireColumn property.
      • Description: Returns a Range object representing the entire column containing the Range object returned by item #2 above.
    4. Item: AutoFit.
      • VBA Construct: Range.AutoFit method.
      • Description: Modifies the width of the column represented by the Range object returned by item #3 above to achieve the best fit (autofits).

    Macro Example

    The following macro autofits the width of column G of the worksheet named “Column width” based on the contents of all the cells in the entire column.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA autofits the width of column G based on the contents of all the cells in the entire column. Notice the contents in cell G10 (Autofit based on entire column), which are used as the basis for the autofitting operation.

    #5: AutoFit Column Width Based on Specific Cell

    VBA Code to AutoFit Column Width Based on Specific Cell

    To autofit the width of a column with VBA, considering the contents of a specific cell or row, use a statement with the following structure:

    Process Followed by VBA Code

    return column > autofit entire column width to contents of cell” width=”493″ height=”105″>

    VBA Statement Explanation

    1. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    2. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell.
        • This cell:
          • Is within the column you autofit.
          • Is the cell whose contents Excel considers for purposes of achieving the best fit (autofitting).
        • You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).
    3. Item: Columns.
      • VBA Construct: Range.Columns property.
      • Description: Returns a Range object representing the column containing the Range object returned by item #2 above.
    4. Item: AutoFit.
      • VBA Construct: Range.AutoFit method.
      • Description: Modifies the width of the column represented by the Range object returned by item #3 above to achieve the best fit (autofits) based on the contents within the cell represented by the Range object returned by item #2 above.

    Macro Example

    The following macro autofits the width of column I of the worksheet named “Column width” based on the contents of cell I5.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets autofits the width of column I based on the contents of cell I5. Notice the contents in cell I10 (Autofit based on specific cell), which aren’t used as the basis for the autofitting operation.

    #6: Set Column Width in Points

    VBA Code to Set Column Width in Points

    To set the width of a column in points with VBA, use a macro with the following statement structure:

    Process Followed by VBA Code

    specify column width in points 3 times” width=”689″ height=”192″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in points without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = ColumnWidthPoints * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: ColumnWidthPoints.
      • VBA Construct: Numeric (for example, Double) variable.
      • Description: Specifies the width (in points) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthPoints, use a numeric data type that can handle the value you use to specify the column width in points.
    3. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    4. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    5. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #3 above) and Width (item #4 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in points (item #2 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts ColumnWidthPoints from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column J of the worksheet named “Column width” to 80 points.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column J to 80 points.

    #7: Set Column Width in Inches

    VBA Code to Set Column Width in Inches

    To set the width of a column in inches with VBA, use a macro with the following statement structure:

    Process Followed by VBA Code

    specify column width in inches 3 times” width=”686″ height=”191″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in inches without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = Application.InchesToPoints(ColumnWidthInches) * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: Application.InchesToPoints.
      • VBA Construct: Application.InchesToPoints method.
      • Description: Converts the measurement specified by item #3 below from inches to points.
    3. Item: ColumnWidthInches.
      • VBA Construct: Inches parameter of Application.InchesToPoints method.
      • Description: Specifies the width (in inches) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthInches, use a numeric data type that can handle the value you use to specify the column width in inches.
    4. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    5. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    6. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #4 above) and Width (item #5 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in inches/points (items #2 and #3 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts Application.InchesToPoints(ColumnWidthInches) from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column K of the worksheet named “Column width” to 1 inch.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column K to 1 inch.

    #8: Set Column Width in Centimeters

    VBA Code to Set Column Width in Centimeters

    To set the width of a column in centimeters with VBA, use a macro with the following statement structure:

    Process Followed by VBA Code

    specify column width in centimeters 3 times” width=”683″ height=”192″>

    VBA Statement Explanation

    Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With

    1. Item: With… End With.
      • VBA Construct: With… End With statement.
      • Description: Statements within the With… End With statement (lines # through #4 below) are executed on the Range object returned by item #3 below.
    2. Item: Worksheet.
      • VBA Construct: Workbook.Worksheets property.
      • Description: Returns a Worksheet object representing the worksheet you work with.
    3. Item: Range(“A1CellReference”).
      • VBA Construct: Worksheet.Range property.
      • Description: Returns a Range object representing a cell within the column whose width you set. You specify the cell using an A1-style cell reference (A1CellReference) enclosed within quotations (“”).

    Lines #2 and #4: For Counter = 1 To 3 | Next Counter

    1. Item: For… Next Counter.
      • VBA Construct: For… Next statement.
      • Description: Repeats the statement within the loop (line #3 below) 3 times, as required by item #3 below.
    2. Item: Counter.
      • VBA Construct: Counter of For… Next statement.
      • Description: Loop counter. If you explicitly declare a variable to represent the loop counter, use the Long data type.
    3. Item: 1 To 3.
      • VBA Construct: Counter Start (1) and Counter End (3) of For… Next statement.
      • Description: The statement within the loop (line #3 below) is executed 3 times (1 To 3).
        • Theoretically, line #3 below should be enough to set the column width in centimeters without requiring the loop specified by these lines #2 and #4. In practice, this may not be the case. Some tests suggest that repeating line #3 below (or similar) 3 times generally gets you the closest to the specified column width.

    Line #3: .ColumnWidth = Application.CentimetersToPoints(ColumnWidthCentimeters) * (.ColumnWidth / .Width)

    1. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Sets the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this first mention, (.ColumnWidth = …), ColumnWidth is the property to which a value is assigned. The value assigned to the ColumnWidth property is the value returned by the other items within this statement.
    2. Item: Application.CentimetersToPoints.
      • VBA Construct: Application.CentimetersToPoints method.
      • Description: Converts the measurement specified by item #3 below from centimeters to points.
    3. Item: ColumnWidthCentimeters.
      • VBA Construct: Centimeters parameter of Application.CentimetersToPoints method.
      • Description: Specifies the width (in centimeters) of the columns containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • If you explicitly declare a variable to represent ColumnWidthCentimeters, use a numeric data type that can handle the value you use to specify the column width in centimeters.
    4. Item: .ColumnWidth.
      • VBA Construct: Range.ColumnWidth property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • .ColumnWidth is included twice in the statement. In this second mention, (.ColumnWidth), ColumnWidth returns the current value of the property.
        • The ColumnWidth property returns the column width in units based on the size (width) of the font you use in the Normal style (for example, Calibri 11). Therefore, 1 unit of column width is equal to 1 character of the Normal style font. If your Normal style font is a proportional (not fixed-width) font, Excel considers the width of the character “0” (the number zero).
    5. Item: .Width.
      • VBA Construct: Range.Width property.
      • Description:
        • Returns the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The Width property returns the column width in points.
    6. Item: (.ColumnWidth / .Width).
      • VBA Construct: Numeric expression.
      • Description:
        • Both ColumnWidth (item #4 above) and Width (item #5 above) return the width of the column containing the Range object within the opening statement of the With… End With block (line #1, item #3 above).
        • The units in which ColumnWidth and Width return the column width differ.
          • ColumnWidth expresses the column width in units based on the size (width) of the font you use in the Normal style.
          • Width expresses the column width in points.
        • ColumnWidth divided by Width (.ColumnWidth / .Width) returns the factor by which you must multiply the desired column width expressed in centimeters/points (items #2 and #3 above) to obtain the appropriate column width in units based on the size (width) of the font you use in the Normal style. In other words, this expression converts Application.CentimetersToPoints(ColumnWidthCentimeters) from points to the units required by the ColumnWidth property.

    Macro Example

    The following macro sets the width of column L of the worksheet named “Column width” to 1 centimeter.

    Effects of Executing Macro Example

    The following GIF illustrates the results of executing this macro example. As expected, VBA sets the width of column L to 1 centimeter.

    Источник

    I usually try to avoid VBA in Excel, but it would be convenient to be able to type text into a cell, and have its column get wider or narrower to accommodate the text remaining as it’s entered or deleted.

    This would be subject, of course, to the lengths of the text in the other cells in the column.

    ‘Auto-fit as you type’, I guess you might call it.

    Is there an easy way to do this in a suitable handler?

    asked Jan 12, 2010 at 10:48

    ChrisA's user avatar

    1

    I’m not sure if there is a way to do it while your typing. I think excel generally stretches the cell view to display all the text before it fires the worksheet_change event.

    This code will resize the column after you have changed and moved the target to a new range. Place it in the worksheet module.

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Dim nextTarget As Range
    
        Set nextTarget = Range(Selection.Address) 'store the next range the user selects
    
        Target.Columns.Select 'autofit requires columns to be selected
        Target.Columns.AutoFit
    
        nextTarget.Select
    End Sub
    

    If your just looking to do it for a particular column you would need to check the target column like this:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Dim nextTarget As Range
    
        Set nextTarget = Range(Selection.Address) 'store the next range the user selects
    
        If Target.Column = 1 Then
    
            Target.Columns.Select 'autofit requires columns to be selected
            Target.Columns.AutoFit
    
            nextTarget.Select
        End If
    End Sub
    

    answered Jan 12, 2010 at 14:53

    Fink's user avatar

    FinkFink

    3,31619 silver badges26 bronze badges

    I cannot think of a way to do what you ask for but something very close to your need.
    In modern versions of Excel (2010+, I don’t know about the 2007 version) you could use the following macro to resize your column to fit data as soon you finished entering data in a cell.

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Application.ScreenUpdating = False
        ActiveSheet.Columns.AutoFit
    End Sub
    

    Put the macro in ThisWorkbook module

    answered Oct 1, 2014 at 10:52

    Sathish's user avatar

    SathishSathish

    1813 silver badges11 bronze badges

    This will automatically fit columns width

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Columns.AutoFit
    End Sub
    

    cup's user avatar

    cup

    7,4294 gold badges17 silver badges42 bronze badges

    answered Jan 14, 2015 at 13:05

    aym has's user avatar

    I just tried the previous two answers on a sheet and they didn’t do anything, idk if the «ByVal Sh» is the problem?? was it a typo?

    Anyhow, here is my answer, checked it and it works:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target Is Nothing Then
          Exit Sub
        Else
          With Target
            .Columns.Select
            .Columns.AutoFit
          End With
    End If
    End Sub
    

    -.Reverus.

    answered Dec 9, 2017 at 21:33

    Reverus's user avatar

    0

     

    Trambulanga

    Пользователь

    Сообщений: 20
    Регистрация: 11.01.2023

    #1

    18.02.2023 10:39:18

    Доброго дня.
    Есть ли в VBA метод, с помощью которого, можно задавать ширину определенным столбцам?
    Например:
    Мне необходимо, чтобы в таблице, столбцы 1,4,7… были шириной в 20 символов. Столбцы 2,5,8… шириной в 15 символом. и так далее.
    Как задать параметры, не удлинняя код программы?
    Автоподбор не нужен.
    В данный момент все выглядит вот так:

    Код
    .Columns(1).ColumnWidth = 20
        .Columns(2).ColumnWidth = 13
        .Columns(3).ColumnWidth = 5
        .Columns(4).ColumnWidth = 20
        .Columns(5).ColumnWidth = 13
        .Columns(6).ColumnWidth = 5
        .Columns(7).ColumnWidth = 20
        .Columns(8).ColumnWidth = 13
        .Columns(9).ColumnWidth = 5
        .Columns(10).ColumnWidth = 20
        .Columns(11).ColumnWidth = 13
        .Columns(12).ColumnWidth = 5
        .Columns(13).ColumnWidth = 20
        .Columns(14).ColumnWidth = 13
        .Columns(15).ColumnWidth = 5
        .Columns(16).ColumnWidth = 20
        .Columns(17).ColumnWidth = 13
        .Columns(18).ColumnWidth = 5
    

    Изменено: Trambulanga18.02.2023 11:19:04

     

    Artem1977

    Пользователь

    Сообщений: 163
    Регистрация: 28.02.2017

    #2

    18.02.2023 12:07:18

    Trambulanga, например для представленных строк так:

    Код
        Dim i As Integer
        
        For i = 1 To 16 Step 3
            With Sheets(1)
                .Columns(i).ColumnWidth = 20
                .Columns(i + 1).ColumnWidth = 13
                .Columns(i + 2).ColumnWidth = 5
            End With
        Next

    Изменено: Artem197718.02.2023 12:17:33

    Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit

     

    Настя_Nastya

    Пользователь

    Сообщений: 801
    Регистрация: 14.07.2019

    #3

    18.02.2023 12:12:10

    или так

    Код
    Sub h()
    C1 = 20
    C2 = 13
    C3 = 5
    On Error Resume Next
    For i = 1 To 18
        If i = 1 Then ActiveSheet.Columns(1).ColumnWidth = C1
        If ActiveSheet.Columns(i - 1).ColumnWidth = C1 Then ActiveSheet.Columns(i).ColumnWidth = C2
        If ActiveSheet.Columns(i - 1).ColumnWidth = C2 Then ActiveSheet.Columns(i).ColumnWidth = C3
        If ActiveSheet.Columns(i - 1).ColumnWidth = C3 Then ActiveSheet.Columns(i).ColumnWidth = C1
    Next i
    End Sub
     

    Ігор Гончаренко

    Пользователь

    Сообщений: 13746
    Регистрация: 01.01.1970

    #4

    18.02.2023 12:22:13

    Код
    Sub SetColumnWidth()
      Dim c, rg As Range, w
      Set rg = Columns(1):  w = Array(29, 13, 5)
      For c = 4 To 16 Step 3: Set rg = Union(rg, Columns(c)): Next
      For c = 0 To 2: rg.Offset(0, c).ColumnWidth = w(c): Next
    End Sub

    Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

     

    БМВ

    Модератор

    Сообщений: 21378
    Регистрация: 28.12.2016

    Excel 2013, 2016

    #5

    18.02.2023 13:25:12

    в коллекцию

    Код
    With ActiveSheet
        .Columns(1).ColumnWidth = 20
        .Columns(2).ColumnWidth = 13
        .Columns(3).ColumnWidth = 5
        .Columns(1).Resize(, 3).Copy
        .Columns(1).Resize(, 18).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    End With

    По вопросам из тем форума, личку не читаю.

     

    Всем большое спасибо за помощь! О таком количестве методов я и не подозревал)))

     

    Msi2102

    Пользователь

    Сообщений: 3137
    Регистрация: 31.03.2014

    #7

    18.02.2023 18:47:49

    Цитата
    Trambulanga написал:
    О таком количестве методов я и не подозревал

    Вот ещё парочка, мне кажется это можно продолжать бесконечно

    Код
    Sub Макрос1()
        Set col_1 = Union(Columns(1), Columns(4), Columns(7), Columns(10), Columns(13), Columns(16))
        Set col_2 = Union(Columns(2), Columns(5), Columns(8), Columns(11), Columns(14), Columns(17))
        Set col_3 = Union(Columns(3), Columns(6), Columns(9), Columns(12), Columns(15), Columns(18))
        col_1.ColumnWidth = 20
        col_2.ColumnWidth = 13
        col_3.ColumnWidth = 5
    End Sub

    Код
    Sub Макрос1()
        Dim col_1 As Range, m As Byte, arr1 As Variant
        arr1 = Array(20, 13, 5)
        For m = 1 To 3
            For n = m To 15 + m Step 3
                If col_1 Is Nothing Then Set col_1 = Columns(n) Else Set col_1 = Union(col_1, Columns(n))
            Next
            col_1.ColumnWidth = arr1(m - 1):    Set col_1 = Nothing
        Next
    End Sub

    Изменено: Msi210218.02.2023 19:29:31

     

    Апострофф

    Пользователь

    Сообщений: 720
    Регистрация: 06.04.2015

    #8

    18.02.2023 20:37:25

    Код
    For C = 1 To 18
        Columns(C).ColumnWidth = Split("20 13 5")((C - 1) Mod 3)
    Next
     

    nilske

    Пользователь

    Сообщений: 354
    Регистрация: 30.11.2018

    Апострофф, супер!
    Останется только привязать мод к количеству элементов в переменной

    Изменено: nilske18.02.2023 21:21:15

     

    Апострофф

    Пользователь

    Сообщений: 720
    Регистрация: 06.04.2015

    nilske, если удосужитесь ручками набрать «20 13 5 10 15», угадайте, что будет вместо 3)   ;)  

     

    БМВ

    Модератор

    Сообщений: 21378
    Регистрация: 28.12.2016

    Excel 2013, 2016

    Апострофф, В чем смысл использовать Split(«20 13 5») вместо Array(20,13,5), та и тот я б вынес за цикл.

    По вопросам из тем форума, личку не читаю.

     

    Апострофф

    Пользователь

    Сообщений: 720
    Регистрация: 06.04.2015

    #12

    19.02.2023 10:04:05

    БМВ, ARRAY будет быстрее, но вынудит следить за его Bound`ами.
    Вынести за цикл — понятно лучше, но лишняя строка и переменная опять же :)

    Код
    A=ARRAY(20,13,5)
    For C = 1 To 18
        Columns(C).ColumnWidth = A((C - 1) Mod (UBOUND(A)-LBOUND(A)+1))
    Next

    Изменено: Апострофф19.02.2023 10:28:06

     

    Trambulanga

    Пользователь

    Сообщений: 20
    Регистрация: 11.01.2023

    #13

    19.02.2023 16:23:34

    Ну и в догонку тогда, да простят меня админы, если нужно было создать отдельную тему, но вопрос то капец близкий))
    А как с помощью таких же хитрых методов, задать разную высоту строк на листе?
    Допустим, есть таблица. Нужно, чтобы каждая 4 строка в этой таблице была высотой 20, а все остальные по 15. Есть реализация? Нашел только вот это.

    Код
    With Worksheets("Sheet1").Rows(1) 
     .RowHeight = .RowHeight * 2 
    End With
    

    Но либо для меня не подходит, либо я не туда это прописываю…
    Заранее благодарен)  

     

    Ігор Гончаренко

    Пользователь

    Сообщений: 13746
    Регистрация: 01.01.1970

    #14

    19.02.2023 16:31:21

    Цитата
    Trambulanga написал:
    Нужно, чтобы каждая 4 строка

    начиная с какой?
    на листе чуть больше 1 млн. строк, каждых 4-х окажется около 250 тыс. всем 250 тыс. строк нужно назначить заданную высоту?

    Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

     

    5, 14, 23, 32 строки. Остальные не нужны

     

    Ігор Гончаренко

    Пользователь

    Сообщений: 13746
    Регистрация: 01.01.1970

    #16

    19.02.2023 17:31:38

    Цитата
    Trambulanga написал:
    5, 14, 23, 32 строки. Остальные не нужны
    Цитата
    Trambulanga написал:
    Нужно, чтобы каждая 4 строка

    каждая 4-я,  говорите))

    Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

     

    Ну да, тупанул( упустил одну пустую строку в таблице, и посчитал, что в каждой таблице это будет 4-ая. Прошу прощения. Ну собственно да, именно те строки, что я указал выше…

     

    Ігор Гончаренко

    Пользователь

    Сообщений: 13746
    Регистрация: 01.01.1970

    #18

    19.02.2023 17:58:34

    Код
    Rows.RowHeight = 15
    for r = 5 to 32 step 9
      Rows(r).RowHeight = 20
    next

    Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

     

    Trambulanga

    Пользователь

    Сообщений: 20
    Регистрация: 11.01.2023

    #19

    19.02.2023 18:16:01

    Ігор Гончаренко, Благодарю за помощь!

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

    Pelena

    Дата: Пятница, 08.06.2012, 21:33 |
    Сообщение № 1

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Всем доброго вечера.
    Вот, споткнулась на ровном месте, прошу помощи.
    Экспортирую записи из запроса Access в таблицу Excel, создается новый файл, шаблон не используется. Как задать в процедуре автоподбор ширины столбцов по содержимому? Наверняка есть метод, обеспечивающий эту операцию. Подскажите, пожалуйста


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    RAN

    Дата: Пятница, 08.06.2012, 22:14 |
    Сообщение № 2

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    Quote (Pelena)

    Как задать в процедуре автоподбор ширины столбцов по содержимому?

    Макрорекордер?
    Вроде справляется. smile
    Если нет — подскажем.


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Gustav

    Дата: Пятница, 08.06.2012, 22:28 |
    Сообщение № 3

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 2398


    Репутация:

    985

    ±

    Замечаний:
    0% ±


    начинал с Excel 4.0, видел 2.1

    По окончании экспорта делаете Range(«A1»).CurrentRegion.EntireColumn.AutoFit


    МОИ: Ник, Tip box: 41001663842605

     

    Ответить

    Pelena

    Дата: Пятница, 08.06.2012, 22:39 |
    Сообщение № 4

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Спасибо, Gustav и макрорекодер smile
    А чем отличается EntireColumn от просто Column? Я написала …Sheets(1).Column.AutoFit. Вроде и так работает


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    RAN

    Дата: Пятница, 08.06.2012, 22:48 |
    Сообщение № 5

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    EntireColumn — целый столбец (обычно содержащий ячейку(адрес))
    Sheets(1).Column.AutoFit — сказать сложно
    Sheets(1).Columns.AutoFit — столбцы листа 1 — автоподбор (ширины столбца)


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Pelena

    Дата: Пятница, 08.06.2012, 22:54 |
    Сообщение № 6

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Конечно, Columns, ошиблась.
    Спасибо за разъяснение


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    Gustav

    Дата: Суббота, 09.06.2012, 00:19 |
    Сообщение № 7

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 2398


    Репутация:

    985

    ±

    Замечаний:
    0% ±


    начинал с Excel 4.0, видел 2.1

    EntireColumn — это всегда полная колонка всего листа. Columns(i) — это i-я колонка в пределах конкретного диапазона (не обязательно всего листа), для которого это свойство вызвано. Например, Range(«B2:K4»).Columns(1) — это диапазон B2:B4. А Range(«B2:K4»).Columns(1).EntireColumn — это диапазон B:B. А Range(«B2:K4»).EntireColumn — это диапазон B:K, т.е. полные колонки от B до K.


    МОИ: Ник, Tip box: 41001663842605

     

    Ответить

    Pelena

    Дата: Суббота, 09.06.2012, 09:50 |
    Сообщение № 8

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Gustav, спасибо. То есть в контексте ширины столбца, в общем-то не важно, пишу я Range(«B2:K4»).Columns.AutoFit или Range(«B2:K4»).EntireColumn.AutoFit ?
    А вот мой вариант Sheets(1).Columns.AutoFit, наверное, не совсем удачный, так как идет обращение ко всем столбцам листа, а не только к заполненным. В этом плане использование Range(«A1»).CurrentRegion более оптимально. Я правильно понимаю?

    ЗЫ: извиняюсь за глупые вопросы, но с объектами Excel практически не знакома, а тупо копировать/вставить не привыкла


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    RAN

    Дата: Суббота, 09.06.2012, 10:00 |
    Сообщение № 9

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    Правильно. Но к использованию CurrentRegion тоже следует подходить аккуратно. Он ограничивается первой пустой строкой(столбцом).
    Для столбцов с 1 по 6 можно записать так
    [vba]

    Code

    Sheets(1).Columns(1:6).AutoFit

    [/vba]


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Pelena

    Дата: Суббота, 09.06.2012, 10:18 |
    Сообщение № 10

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Quote (RAN)

    ограничивается первой пустой строкой(столбцом)

    Да, кстати, это тоже придется учитывать
    Еще раз спасибо


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    Gustav

    Дата: Суббота, 09.06.2012, 11:10 |
    Сообщение № 11

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 2398


    Репутация:

    985

    ±

    Замечаний:
    0% ±


    начинал с Excel 4.0, видел 2.1

    Quote (RAN)

    Но к использованию CurrentRegion тоже следует подходить аккуратно. Он ограничивается первой пустой строкой(столбцом).

    «Пожалуйста, «Стамбул — город контрастов» — какая разница — а объявление перепишем!» ©

    Пожалуйста, опасаетесь CurrentRegion — есть UsedRange, а «объявление перепишем»:
    [vba]

    Code

    Sheets(1).UsedRange.EntireColumn.AutoFit

    [/vba]

    Quote (RAN)

    Для столбцов с 1 по 6 можно записать так
    [vba]

    Code

    Sheets(1).Columns(1:6).AutoFit

    [/vba]

    Нельзя. На несколько колонок/строк можно ссылаться либо Sheets(1).Columns(«A:F»), либо Sheets(1).Rows(«1:6»). Без кавычек числовым индексом можно ссылаться только на единичную колонку или строку: Columns(1), Rows(5). Ну и как частный случай кавычек можно также Columns(«A») и Rows(«5»).


    МОИ: Ник, Tip box: 41001663842605

    Сообщение отредактировал GustavСуббота, 09.06.2012, 11:27

     

    Ответить

    Gustav

    Дата: Суббота, 09.06.2012, 11:42 |
    Сообщение № 12

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 2398


    Репутация:

    985

    ±

    Замечаний:
    0% ±


    начинал с Excel 4.0, видел 2.1

    Quote (Pelena)

    То есть в контексте ширины столбца, в общем-то не важно, пишу я Range(«B2:K4»).Columns.AutoFit или Range(«B2:K4»).EntireColumn.AutoFit ?

    Pelena, на практике, как правило, не важно, но отличие есть и знать его нужно. А нюанс в следующем. Допустим в ячейках B2:B4 — строки по 3 символа, а в ячейке B5 (т.е. уже за пределами нашего диапазона) — строка 30 символов. Тогда Range(«B2:K4»).Columns.AutoFit сделает ширину всей колонки B равной 3 символам, в то время как Range(«B2:K4»).EntireColumn.AutoFit расширит колонку B до 30 символов.


    МОИ: Ник, Tip box: 41001663842605

     

    Ответить

    RAN

    Дата: Суббота, 09.06.2012, 12:04 |
    Сообщение № 13

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    Погорячился! sad


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Gustav

    Дата: Суббота, 09.06.2012, 12:17 |
    Сообщение № 14

    Группа: Друзья

    Ранг: Старожил

    Сообщений: 2398


    Репутация:

    985

    ±

    Замечаний:
    0% ±


    начинал с Excel 4.0, видел 2.1


    Да ладно! smile Признаюсь, я сам когда-то, когда эту премудрость постигал, то далеко не сразу допёр, что вместо Columns(1:6) или Columns(«1:6»), которые не катили, надо буквы попробовать…


    МОИ: Ник, Tip box: 41001663842605

     

    Ответить

    RAN

    Дата: Суббота, 09.06.2012, 13:11 |
    Сообщение № 15

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    А я знал, да погорячился. smile


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Pelena

    Дата: Суббота, 09.06.2012, 18:50 |
    Сообщение № 16

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Gustav, RAN, я получила исчерпывающий ответ на свой вопрос, узнала много нового и полезного.
    Макрорекодер мне точно не смог бы так помочь smile
    Спасибо


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    RAN

    Дата: Суббота, 09.06.2012, 19:39 |
    Сообщение № 17

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645

    Pelena, всегда рады! prof smile


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    Понравилась статья? Поделить с друзьями:
  • Vba excel workbook методы
  • Vba excel union примеры
  • Vba excel автоподбор высоты строк
  • Vba excel union range
  • Vba excel workbook protect