我多次寻找相关问题,但从未找到类似的问题。每个人总是想知道如何调整列宽,这很简单,我有更细致的问题。
我喜欢自动调整,使表格看起来干净并确保所有内容都可见(又名。;ctrl-a,双击列之间的顶部),但是如果您有一个单元格包含一长段文本(例如底部的注释)当我只想根据我的列标题或表数据更新时,它使该列的宽度约为 400 像素以捕获整个文本。 我希望能够标记此文本单元格以供 Excel 忽略以进行自动调整。
如果您同意将其居中,则可以将该单元格对齐方式(以及右侧的 1 个单元格)设置为“跨选择居中”,它将被忽略。但是,就像我上面的例子一样,我经常希望该文本左对齐或右对齐,不允许 C.A.S.去工作。
有人能够做到这一点吗?
编辑:经过十多年的搜索,我找到了答案。它是如上所述使用居中选择,但使用自定义数字格式自动用空格填充文本以实现所需的对齐方式。我在下面整理了一张图片来帮助以图形方式解释这一点。
这里还有可复制的自定义数字格式(它们只需要应用于最左侧的文本单元格,所有受影响的单元格都需要居中选择):
对于左对齐(删除引号,注意末尾空格):
“一般*;一般*;一般*;一般*”
对于右对齐(删除引号):
不确定这是否是设计使然,但根据我的经验,自动调整大小会忽略任何打开换行文本的单元格。因此,也许可以考虑在自动调整大小时为您想要忽略的范围打开文本换行。
如果您可以使用 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")
我能够基于使用 Center Across Selection 找到解决方案(TLDR:请参阅对原始帖子的编辑)。 CAS 的优点在于,为了自动调整列宽,Excel 会忽略使用 CAS 文本对齐方式在单元格中键入的任何文本,只要 CAS 文本右侧至少有 1 个空白单元格即可也使用 CAS(因此它不能仅在 1 个单元上工作)。这仅适用于您想要居中的文本,对于其他任何内容,您需要修改此方法。
对于右对齐,将[您的文本]输入到要合并到对齐区域的最左侧单元格中,CAS区域(在格式,对齐,水平,跨选择中心下),选择带有文本的单元格并输入为自定义数字格式(格式、数字、自定义):
[* 通用;* 通用;* 通用;* 通用]
这对每个正;负;零;文本值使用标准通用格式,但采用每个值并重复(“*”)一个字符(“”)以将其填充在值之前以填充整个选择。
对于左对齐,与上面完全相同,除了自定义数字格式为:
一般* ;一般* ;一般* ;一般*
注意 * 后面的最后一个空格。