在排除某些单元格/行时自动调整 Excel 中的列宽

Posted

技术标签:

【中文标题】在排除某些单元格/行时自动调整 Excel 中的列宽【英文标题】:Auto adjust column widths in Excel while excluding certain cells/rows 【发布时间】:2017-02-24 11:55:50 【问题描述】:

我曾多次寻找相关问题,但从未找到类似问题。每个人都一直想知道如何调整列宽,这很简单,我有更细微的问题。

我喜欢自动调整,制作干净的表格并确保所有内容都可见(又名。;ctrl-a,在列之间双击顶部),但如果您有一个带有长文本的单元格(如注释表的底部),它使该列像 400 像素宽以捕获整个文本,而我只是希望它根据我的列标题或表数据进行更新。 我希望能够标记此文本单元格以被 excel 忽略以进行自动调整。

如果您可以将其居中,则可以将该单元格对齐(以及右侧的 1 个单元格)设置为“跨选区居中”,它将被忽略。但是,就像我上面的例子一样,我经常希望这个文本左对齐或右对齐,不允许 C.A.S.上班。

有人能做到吗?

【问题讨论】:

我发现,至少在 Office 2016 中,他们已经实现了一个基本上正是我想要的命令。主页 -> 单元格 -> 格式 -> AutoFitColumnWidths (Alt->H O I)。您可以选择某些行或某些单元格等,并使用该命令仅通过突出显示的单元格自动调整突出显示的列。 谢谢 - 真的很有用! :) 【参考方案1】:

如果您对 VBA 解决方案感到满意,您可以编写一个自定义例程来执行此操作。在此示例中,如果您将想要的范围传递给“仅自动调整标题”,它实际上会将标题复制到一个干净的单元格,运行自动调整,然后将该自动调整的宽度应用于您的列:

Sub AutoFitHeader(HeaderRow As Range)

  Dim col As Range
  Dim ws As Worksheet
  Set ws = ActiveWorkbook.Worksheets.Add
  ws.Visible = xlSheetHidden

  Application.DisplayAlerts = False

  For Each col In HeaderRow
    ws.Range("A1").Value = col.Value
    ws.Columns("A").AutoFit

    col.EntireColumn.ColumnWidth = ws.Columns("A").ColumnWidth
  Next col

  ws.Delete

  Application.DisplayAlerts = True

End Sub

然后这样称呼它:

AutoFitHeader Range("A1:H1")

【讨论】:

这可能是最好的解决方案,但我有几个问题。这可以扩展到二维范围,所以我会突出显示我的整个表格而不仅仅是一行?或者,老实说,相反,“自动适应不在单元格 X Y 或 Z 中的所有数据”(或者可能是范围 A13:H20)?然后,你如何实际运行它?您是否将其称为单元格中的 UDF?或者是否有一个 VBA 运行空间,您需要在其中键入 VBA 查找命令“AutoFitHeader Range("X:Z')”?【参考方案2】:

不确定这是否是设计使然,但根据我的经验,自动调整大小会忽略任何已打开换行文本的单元格。因此,也许可以考虑在自动调整大小时为您希望忽略的范围打开文本换行。

【讨论】:

这行得通,在许多情况下,在此类单元格中启用文本换行是有意义的。谢谢! 这对我不起作用。缩小列的宽度时,将考虑启用换行的单元格中的文本,并且宽度仅缩小到下一个空格,因此不会将新单词换行到下一行。这是在 Microsoft 365 版本 2108 中,内部版本 14326.20784 即点即用。

以上是关于在排除某些单元格/行时自动调整 Excel 中的列宽的主要内容,如果未能解决你的问题,请参考以下文章

更改列中的列宽或行高Excel

如何让excel表格自动适应文字长度?

POI如何自动调整Excel单元格中字体的大小

怎么样为Excel2010表格设置自动换行

Excel表怎么让单元格自动调整宽度?

求助excel单元格不同自动添加3个空白行