【问题标题】:AutoFit column size in Excel based on content of column根据列的内容在 Excel 中自动调整列大小
【发布时间】:2014-11-27 12:04:46
【问题描述】:

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

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

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

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

请帮助解决上述问题或提出任何替代方案来实现代码,以确保数字列的宽度都相同 (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

【问题讨论】:

  • 到目前为止你的代码是什么?你在哪一步挣扎?这不是免费的编码服务。这里的人很乐意帮助您完成编码工作。
  • 谢谢,我已经按照上面的方法更新了。欢呼

标签: vba excel excel-2010


【解决方案1】:

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

    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

【讨论】:

  • 非常感谢您提供的代码。从来不知道可以做到,但你让它看起来很容易。哇。我从最后删除了“ws.Range("A1").Select",它运行起来就像一个魅力:-)
猜你喜欢
  • 2014-02-21
  • 2014-01-06
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多