Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于列内容在Excel中自动调整列大小_Vba_Excel_Excel 2010 - Fatal编程技术网

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

Vba 基于列内容在Excel中自动调整列大小,vba,excel,excel-2010,Vba,Excel,Excel 2010,我想使用VBA代码,我可以对工作簿中的所有工作表运行该代码,以便按以下顺序调整列的大小: 1.)首先,将所有工作表中的所有列调整为宽度10 2.)其次,识别文本多于数字的任何列,并自动调整列大小以适应内容 更改的目的是为我们的财务报告提供标准列宽布局,这些财务报告通过Hyperion Smart View在Excel中填充。所有单元格在Excel中以“自定义”格式显示,不能更改。报告数据(实际数字)可以从spreadhseet中的任何一行开始,因为列标题有时需要3到10行(可能更多)。我们有很多

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

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

2.)其次,识别文本多于数字的任何列,并自动调整列大小以适应内容

更改的目的是为我们的财务报告提供标准列宽布局,这些财务报告通过Hyperion Smart View在Excel中填充。所有单元格在Excel中以“自定义”格式显示,不能更改。报告数据(实际数字)可以从spreadhseet中的任何一行开始,因为列标题有时需要3到10行(可能更多)。我们有很多蝴蝶报告(中间的尺寸是‘列C’,在那个栏的左边和右边有事实(数字))。在某些情况下,a列中标题为“实际值”的列可能在同一列中的下一列(第50行)有一个子标题“收入”。因此,可以公平地说,在没有设置规则的列中存在数字和文本的混合

请提供上述帮助或建议任何替代方案,以实现一个代码,该代码可以确保数字列的宽度(10)相同,并且文本列根据大小“自动调整”

到目前为止,我有以下内容,它将所有列宽更新为大小10,然后手动从工作表BM03和BM10中识别列以进行自动拟合:

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

您可以尝试计算每个工作表中的每一列,并将文本单元格的数量与数字单元格的数量进行比较。然后格式化以自动调整文本多于数字的文本

    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
Dim ws As工作表
对于ActiveWorkbook.Worksheets中的每个ws
调用调整列大小(ws)
'如果ws.Name=“BM03a息税前利润报告(摘要和De)”,则
'ws.Columns(“I:I”).entireclumn.AutoFit
'
'ElseIf ws.Name=“BM10资产负债表”则
'ws.Columns(“A:A”).entireclumn.AutoFit
'
"完"
下一个
端接头
子大小调整列(ws-As工作表)
与ws
.范围(“A:X”).列宽=10
以
对于i=1到24
Numbers=工作表function.Count(ws.Columns(i))
Text=工作表function.CountA(ws.Columns(i))-编号
如果数字<文本,则
ws.Columns(i).EntireColumn.AutoFit
如果结束
接下来我
ws.Range(“A1”)。选择
端接头

到目前为止,你的代码是什么?你在挣扎哪一步?这不是一个免费的编码服务。这里的人会很乐意帮助你进行编码。谢谢,我已经如上所述更新了它。干杯非常感谢你的代码。从来都不知道这是可以做到的,但你让它看起来很简单。哇。我删除了“ws.Range(“A1”)。选择”从最后开始,它就像一个符咒一样运行:-)