Microsoft 365 版 Excel:根据标题行中的列名更改列宽

Microsoft 365 版 Excel:根据标题行中的列名更改列宽

我正在使用 Microsoft 365 版 Excel。

在第一个工作表上,我录制了一个宏来调整列宽和行高。然后我切换到第二个工作表并运行此宏,发现我遇到了下面描述的问题。

每个工作表至少包含一个(可能多个)列,其标题行(第 1 行)中的列名包含字符串“foo”。这些列的位置因工作表而异。

我对所有列执行了一些步骤。这些步骤工作正常。但是,我想对“foo”列执行一个额外的步骤。具体来说,我想将这些列的宽度更改为 30。由于这些列的位置因工作表而异,因此这并不是那么容易做到。

以下是说明该问题的 VBA 代码:

Sub Macro1()
    ' This part works.
    Application.Goto Reference:="R1C1"
    Cells.Select

    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With

    Columns("A:A").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.ColumnWidth = 100

    Cells.Select
    Cells.EntireRow.AutoFit
    Cells.EntireColumn.AutoFit

    ' The problem starts here.
    ' How may I do this for all columns whose column name in the header row contains "foo"?
    ' There are an arbitrary number of such columns and their locations vary from worksheet to worksheet.
    Columns("G:G").Select
    Selection.ColumnWidth = 30
    Columns("L:L").Select
    Selection.ColumnWidth = 30

    ' The rest of this macro works fine.
    Cells.Select
    Cells.EntireRow.AutoFit

    With ActiveWindow
        .SplitColumn = 0
        .SplitRow = 1
    End With

    ActiveWindow.FreezePanes = True
End Sub

在此代码中,我将 G 列和 L 列的宽度设置为 30。除了对列进行硬编码之外,我怎样才能更改此代码以将列名(在标题行中)包含“foo”的任何列的宽度设置为 30?

答案1

您可以遍历所有列,并检查顶行是否包含“foo”:

For Each myColumn In ActiveSheet.Columns
    If InStr(1, LCase(myColumn.Cells(1, 1)), "foo") <> 0 Then
        myColumn.ColumnWidth = 30
    End If
Next

相关内容