Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.
Размер ячейки
Размер ячейки по высоте и ширине определяется высотой строки и шириной столбца, на пересечении которых она находится. Если, в вашем случае, нежелательно изменять размеры всей строки или всего столбца, используйте объединенные ячейки нужной величины.
Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.
Высота строки и ширина столбца в Excel
Программно, без дополнительных макросов, можно изменять высоту строки только в пунктах, а ширину столбца только в символах.
На сайте поддержки офисных приложений Microsoft так написано об этих величинах:
- высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
- ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.
Смотрите, как сделать все ячейки рабочего листа квадратными.
Высота строки
Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.
Примеры изменения высоты строк:
Пример 1
Изменение высоты отдельной ячейки:
ActiveCell.RowHeight = 10 |
в результате, строка, в которой находится активная ячейка, приобретает высоту, равную 10 пунктам.
Пример 2
Изменение высоты строки:
в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.
Пример 3
Изменение высоты ячеек заданного диапазона:
Range(«A1:D6»).RowHeight = 20 |
в результате, каждой из первых шести строк рабочего листа будет задана высота, равная 20 пунктам.
Пример 4
Изменение высоты ячеек целого столбца:
Columns(5).RowHeight = 15 |
в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.
Ширина столбца
Для изменения ширины столбца используйте свойство ColumnWidth объекта Range. Как и в случае с высотой строки, не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — ширина всех столбцов, пересекающихся с объектом Range будет изменена после присвоения свойству ColumnWidth этого объекта нового значения.
Примеры изменения ширины столбцов:
Пример 1
Изменение ширины отдельной ячейки:
ActiveCell.ColumnWidth = 15 |
в результате, столбец, в котором находится активная ячейка, приобретает ширину, равную 15 символам.
Пример 2
Изменение ширины столбца:
Columns(3).ColumnWidth = 50 |
в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.
Пример 3
Изменение ширины ячеек заданного диапазона:
Range(«A1:D6»).ColumnWidth = 25 |
в результате, каждому из первых четырех столбцов рабочего листа будет задана ширина, равная 25 символам.
Пример 4
Изменение ширины ячеек целой строки:
в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.
Автоподбор ширины
Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:
‘запишем для примера в любую ячейку рабочего ‘листа какой-нибудь текст, например, такой: Cells(5, 5) = «Автоподбор ширины ячейки» ‘теперь подгоним ширину ячейки, а точнее ‘столбца, в котором эта ячейка находится: Cells(5, 5).EntireColumn.AutoFit |
Имейте в виду, что ширина столбца будет подогнана по расположенной в этом столбце ячейке с самым длинным содержимым. Например, если длина содержимого ячейки Cells(7, 5) будет превышать длину содержимого ячейки Cells(5, 5), то автоподбор ширины пятого столбца произойдет по содержимому ячейки Cells(7, 5), несмотря на то, что в строке кода указана другая ячейка.
Как осуществить автоподбор ширины объединенной ячейки, в которой метод AutoFit не работает, смотрите в следующей статье.
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 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
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.
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
Specify column width in units” width=”316″ height=”102″>
VBA Statement Explanation
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the column containing the Range object returned by item #2 above.
- 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.
#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
Specify column width in units” width=”312″ height=”105″>
VBA Statement Explanation
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the columns returned by item #2 above.
- 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.
#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
Specify column width in units” width=”312″ height=”105″>
VBA Statement Explanation
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the columns returned by item #2 above.
- 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.
#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
return entire column > autofit entire column width” width=”497″ height=”107″>
VBA Statement Explanation
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- 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.
- 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.
#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
return column > autofit entire column width to contents of cell” width=”493″ height=”105″>
VBA Statement Explanation
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- This cell:
- Item: Columns.
- VBA Construct: Range.Columns property.
- Description: Returns a Range object representing the column containing the Range object returned by item #2 above.
- 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.
#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
specify column width in points 3 times” width=”689″ height=”192″>
VBA Statement Explanation
Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- 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.
- 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).
- 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.
- 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.
#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
specify column width in inches 3 times” width=”686″ height=”191″>
VBA Statement Explanation
Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- Item: Application.InchesToPoints.
- VBA Construct: Application.InchesToPoints method.
- Description: Converts the measurement specified by item #3 below from inches to points.
- 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.
- 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).
- 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.
- 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.
#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
specify column width in centimeters 3 times” width=”683″ height=”192″>
VBA Statement Explanation
Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- Item: Application.CentimetersToPoints.
- VBA Construct: Application.CentimetersToPoints method.
- Description: Converts the measurement specified by item #3 below from centimeters to points.
- 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.
- 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).
- 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.
- 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.
Содержание
- VBA – Autofit Columns
- Autofit Column using VBA
- Autofit All Used Columns
- VBA Code Examples Add-in
- VBA Code Generator
- AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
- What is AutoMacro?
- VBA Excel. Размер ячейки (высота строки, ширина столбца)
- Размер ячейки
- Высота строки
- Ширина столбца
- Автоподбор ширины
- VBA AutoFit (Rows, Column, or the Entire Worksheet)
- Key Points
- AutoFit a Column
- AutoFit a Row
- AutoFit UsedRange (Rows and Columns)
- AutoFit Entire Worksheet
- Excel VBA Column Width: Step-by-Step Guide and 8 Code Examples to Set or AutoFit the Column Width with Macros
- Related VBA and Macro Tutorials
- #1: Set Column Width
- VBA Code to Set Column Width
- Process Followed by VBA Code
- VBA Statement Explanation
- Macro Example
- Effects of Executing Macro Example
- #2: Set Column Width for Multiple Contiguous Columns
- VBA Code to Set Column Width for Multiple Contiguous Columns
- Process Followed by VBA Code
- VBA Statement Explanation
- Macro Example
- Effects of Executing Macro Example
- #3: Set Column Width for Multiple Non-Contiguous Columns
- VBA Code to Set Column Width for Multiple Non-Contiguous Columns
- Process Followed by VBA Code
- VBA Statement Explanation
- Macro Example
- Effects of Executing Macro Example
- #4: AutoFit Column Width Based on Entire Column
- VBA Code to AutoFit Column Width Based on Entire Column
- Process Followed by VBA Code
- VBA Statement Explanation
- Macro Example
- Effects of Executing Macro Example
- #5: AutoFit Column Width Based on Specific Cell
- VBA Code to AutoFit Column Width Based on Specific Cell
- Process Followed by VBA Code
- VBA Statement Explanation
- Macro Example
- Effects of Executing Macro Example
- #6: Set Column Width in Points
- VBA Code to Set Column Width in Points
- Process Followed by VBA Code
- VBA Statement Explanation
- Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- Lines #2 and #4: For Counter = 1 To 3 | Next Counter
- Line #3: .ColumnWidth = ColumnWidthPoints * (.ColumnWidth / .Width)
- Macro Example
- Effects of Executing Macro Example
- #7: Set Column Width in Inches
- VBA Code to Set Column Width in Inches
- Process Followed by VBA Code
- VBA Statement Explanation
- Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- Lines #2 and #4: For Counter = 1 To 3 | Next Counter
- Line #3: .ColumnWidth = Application.InchesToPoints(ColumnWidthInches) * (.ColumnWidth / .Width)
- Macro Example
- Effects of Executing Macro Example
- #8: Set Column Width in Centimeters
- VBA Code to Set Column Width in Centimeters
- Process Followed by VBA Code
- VBA Statement Explanation
- Lines #1 and #5: With Worksheet.Range(“A1CellReference”) | End With
- Lines #2 and #4: For Counter = 1 To 3 | Next Counter
- Line #3: .ColumnWidth = Application.CentimetersToPoints(ColumnWidthCentimeters) * (.ColumnWidth / .Width)
- Macro Example
- 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
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the column containing the Range object returned by item #2 above.
- 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
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the columns returned by item #2 above.
- 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
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- Item: ColumnWidth.
- VBA Construct: Range.ColumnWidth property.
- Description: Sets the width of the columns returned by item #2 above.
- 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
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- 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.
- 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
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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 (“”).
- This cell:
- Item: Columns.
- VBA Construct: Range.Columns property.
- Description: Returns a Range object representing the column containing the Range object returned by item #2 above.
- 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
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- 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.
- 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).
- 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.
- 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
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- Item: Application.InchesToPoints.
- VBA Construct: Application.InchesToPoints method.
- Description: Converts the measurement specified by item #3 below from inches to points.
- 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.
- 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).
- 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.
- 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
- 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.
- Item: Worksheet.
- VBA Construct: Workbook.Worksheets property.
- Description: Returns a Worksheet object representing the worksheet you work with.
- 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
- 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.
- 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.
- 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)
- 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.
- Item: Application.CentimetersToPoints.
- VBA Construct: Application.CentimetersToPoints method.
- Description: Converts the measurement specified by item #3 below from centimeters to points.
- 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.
- 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).
- 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.
- 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
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
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
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
7,4294 gold badges17 silver badges42 bronze badges
answered Jan 14, 2015 at 13:05
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
0
Trambulanga Пользователь Сообщений: 20 |
#1 18.02.2023 10:39:18 Доброго дня.
Изменено: Trambulanga — 18.02.2023 11:19:04 |
||
Artem1977 Пользователь Сообщений: 163 |
#2 18.02.2023 12:07:18 Trambulanga, например для представленных строк так:
Изменено: Artem1977 — 18.02.2023 12:17:33 Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit |
||
Настя_Nastya Пользователь Сообщений: 801 |
#3 18.02.2023 12:12:10 или так
|
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#4 18.02.2023 12:22:13
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
БМВ Модератор Сообщений: 21378 Excel 2013, 2016 |
#5 18.02.2023 13:25:12 в коллекцию
По вопросам из тем форума, личку не читаю. |
||
Всем большое спасибо за помощь! О таком количестве методов я и не подозревал))) |
|
Msi2102 Пользователь Сообщений: 3137 |
#7 18.02.2023 18:47:49
Вот ещё парочка, мне кажется это можно продолжать бесконечно
Изменено: Msi2102 — 18.02.2023 19:29:31 |
||||||
Апострофф Пользователь Сообщений: 720 |
#8 18.02.2023 20:37:25
|
||
nilske Пользователь Сообщений: 354 |
Апострофф, супер! Изменено: nilske — 18.02.2023 21:21:15 |
Апострофф Пользователь Сообщений: 720 |
nilske, если удосужитесь ручками набрать «20 13 5 10 15», угадайте, что будет вместо 3) |
БМВ Модератор Сообщений: 21378 Excel 2013, 2016 |
Апострофф, В чем смысл использовать Split(«20 13 5») вместо Array(20,13,5), та и тот я б вынес за цикл. По вопросам из тем форума, личку не читаю. |
Апострофф Пользователь Сообщений: 720 |
#12 19.02.2023 10:04:05 БМВ, ARRAY будет быстрее, но вынудит следить за его Bound`ами.
Изменено: Апострофф — 19.02.2023 10:28:06 |
||
Trambulanga Пользователь Сообщений: 20 |
#13 19.02.2023 16:23:34 Ну и в догонку тогда, да простят меня админы, если нужно было создать отдельную тему, но вопрос то капец близкий))
Но либо для меня не подходит, либо я не туда это прописываю… |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#14 19.02.2023 16:31:21
начиная с какой? Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
5, 14, 23, 32 строки. Остальные не нужны |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#16 19.02.2023 17:31:38
каждая 4-я, говорите)) Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||||
Ну да, тупанул( упустил одну пустую строку в таблице, и посчитал, что в каждой таблице это будет 4-ая. Прошу прощения. Ну собственно да, именно те строки, что я указал выше… |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#18 19.02.2023 17:58:34
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Trambulanga Пользователь Сообщений: 20 |
#19 19.02.2023 18:16:01 Ігор Гончаренко, Благодарю за помощь! |
Автоподбор ширины столбцов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |