基于列的内容在Excel中自动调整列大小

时间:2014-11-26 05:26:28

标签: vba excel-vba excel-2010 excel

我想使用一个VBA代码,我可以为工作簿中的所有工作表运行,以按以下顺序调整列的大小:

1。)首先,将所有工作表中的所有列调整为宽度10

2。)其次,识别任何TEXT比NUMBERS更多的列并自动调整列以适应内容。

更改的目的是为我们的财务报告提供标准列宽布局,并通过Hyperion Smart View在Excel中填充。所有单元格在Excel中格式化为“自定义”,无法更改。报告数据(实际数字)可以从spreadhseet中的任何行开始,因为列标题有时需要3到10行(可能更多)。我们有很多蝴蝶报告(中间的维度'比如列c',在该列的左侧和右侧有事实(数字))。在某些情况下,A列中标题为“Actuals”的列可能在同一列中具有进一步向下(第50行)的子标题“Revenue”。因此,可以公平地说,列中没有数字和文本的混合而没有设定规则。

请帮助完成上述操作或建议任何替代方法,以确保数字列的宽度相同(10),文本列为“自动调整”。

到目前为止,我有以下内容,它将所有列宽更新为10,然后手动识别工作表BM03和BM10中的AutoFit列:

Sub Run_Me_To_Fix_Columns()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Call resizingColumns(ws)

    If ws.name = "BM03a EBIT Report (Summary & De" Then
             ws.Columns("I:I").EntireColumn.Autofit

    ElseIf ws.name = "BM10 Balance Sheet" Then
             ws.Columns("A:A").EntireColumn.Autofit

         End If
    Next
End Sub

Sub resizingColumns(ws As Worksheet)
    With ws
        .Range("A:X").ColumnWidth = 10
            End With
End Sub

1 个答案:

答案 0 :(得分:2)

您可以尝试评估每个工作表中的每一列,并将文本单元格的数量与数字单元格的数量进行比较。然后格式化以自动生成那些文本多于数字的文本。

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Call resizingColumns(ws)

'    If ws.Name = "BM03a EBIT Report (Summary & De" Then
'             ws.Columns("I:I").EntireColumn.AutoFit
'
'    ElseIf ws.Name = "BM10 Balance Sheet" Then
'             ws.Columns("A:A").EntireColumn.AutoFit
'
'         End If
    Next
End Sub

Sub resizingColumns(ws As Worksheet)
    With ws
        .Range("A:X").ColumnWidth = 10
    End With
    For i = 1 To 24
        Numbers = WorksheetFunction.Count(ws.Columns(i))
        Text = WorksheetFunction.CountA(ws.Columns(i)) - Numbers
        If Numbers < Text Then
            ws.Columns(i).EntireColumn.AutoFit
        End If
    Next i
    ws.Range("A1").Select

End Sub