1

I ask as it seems there is a better way than having a separate "With" "EndWith for each Column.

On the active sheet For the entire Columns A1:C1 it is setting to autofit plus two blank spaces, and for the entire Columns D1:G1 it is setting to autofit plus one blank space.

Sub AutoFitColumns()
Worksheets("TestSheet1").Activate

    With Range("A1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 2
    End With
    With Range("B1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 2
    End With
    With Range("C1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 2
    End With
    With Range("D1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 1
    End With
    With Range("E1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 1
    End With
    With Range("F1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 1
    End With
    With Range("G1").EntireColumn
        .AutoFit
        .ColumnWidth = .ColumnWidth + 1
    End With
End Sub
braX
  • 11,506
  • 5
  • 20
  • 33

2 Answers2

3

For example:

Sub AutoFitColumns()
    Dim c As Range
    For Each c In Worksheets("TestSheet1").Range("A1:G1").Cells
        With c.EntireColumn
            .AutoFit
            .ColumnWidth =  .ColumnWidth + IIf(c.Column <= 3, 2, 1)
        End With
    Next c
End Sub
Tim Williams
  • 154,628
  • 8
  • 97
  • 125
0

Autofit Columns

Sub AutoFitColumns()

    Dim AutoFitProperties()
    AutoFitProperties = Array(VBA.Array("A1:C1", 2), VBA.Array("D1:G1", 1))

    With ThisWorkbook.Sheets("TestSheet1")
        Dim Afp, crg As Range
        For Each Afp In AutoFitProperties
            With .Range(Afp(0)).EntireColumn
                .AutoFit
                For Each crg In .Columns
                    crg.ColumnWidth = crg.ColumnWidth + Afp(1)
                Next crg
            End With
        Next Afp
    End With

End Sub
VBasic2008
  • 44,888
  • 5
  • 17
  • 28