查找显示内容太小的文本单元格

我有一个单元格可能包含有时超过单元格的宽度和高度的文本的工作表。 如果我没有注意到并调整行高,文本显示为截止。 有没有人有一个VBA片段或工具,可以find这些细胞,所以我可以调整它们? 谢谢!

识别哪一列太宽将是棘手的,特别是因为单元格内的文本可能具有不同的字体和/或字体大小。 通过使用Range.AutoFit方法来自动调整列的大小要容易得多。

作为一个例子,你可以调用AutoFit方法如下:

Dim myRange As Excel.Range Set myRange = Application.Range("A1:C3") myRange.Columns.AutoFit 

Range.AutoFit方法可能有点过分,但是,导致列太窄 。 因此,您可能需要创build一个build立最小列宽的方法:

 Sub AutoFitColumns(theRange As Excel.Range, minColumnWidth As Double) theRange.Columns.AutoFit Dim column As Excel.Range For Each column In theRange.Columns If column.ColumnWidth < minColumnWidth Then column.ColumnWidth = minColumnWidth End If Next column End Sub 

上面可以调用如下,自动填充列,但最小宽度为8.5:

 Dim myRange As Excel.Range Set myRange = Application.Range("A1:C3") Call AutoFitColumns(myRange, 8.5) 

您也可以自动设置范围的行。 这是需要较less的,但要这样做,你会使用像这样的东西:

 myRange.Rows.AutoFit 

希望这可以帮助!

更新:回复克雷格的评论:

Thansk迈克。 这个电子表格被用作Web界面生成器的结构化input,所以列宽变化,不应该调整。 我真的只是寻找东西来扫描任何单元格的文本显示的文本比单元格将允许适合宽,从而需要行高度更大的单元格。 我不想找一个调整的过程,只是find他们,因为他们很容易忽略。 任何想法呢?

那么显然你想要做件事:(1)确定哪些细胞被切断,然后(2)纠正这些切断。

我明白你希望在两个不同的阶段做到这一点,但步骤(1)几乎不可能在Excel的所有情况下正确执行,因为不仅行高和列宽可以变化,而且可以打开或closures文本打包,字体可以是任何数量的潜在样式和/或尺寸的非比例字体。

总之,没有办法可靠地确定哪些细胞被切断,而不是没有难以置信的工作量。 但是,如果将电子表格限制为只有一种字体样式并使用非比例字体,则可以减轻这种影响。 如果您这样做,那么您可以简单地将列宽与单元格内文本的长度进行比较。 这是因为Excel.Range.ColumnWidth属性返回其已校准的宽度,以便一个单位的列宽等于Normal样式中一个字符的宽度。 对于比例字体,使用字符0(零)的宽度。

因此,对于不使用自动换行和字体为普通样式的简单情况,理想情况下普通字体是非比例字体,则可以遍历范围内的所有单元格,以查找值的位置持有比列宽更长:

 Dim myRange As Range Set myRange = Application.Range("A1:E5") Dim cell As Excel.Range For Each cell in myRange.Cells If Len(CStr(cell.Value)) > cell.ColumnWidth Then MsgBox "The cell at " & cell.Address & " has text that is too long!" End if Next cell 

但是现在来看下一部分…你将如何纠正这个问题? 如果再一次,你有一个非常简单的情况,不使用自动换行和字体是正常的风格,理想的情况下,正常的字体是一个非比例字体,那么你有几个select:

(1)设置列宽以匹配单元格的值长度:

 Dim myRange As Range Set myRange = Application.Range("A1:E5") Dim cell As Excel.Range For Each cell in myRange.Cells If Len(CStr(cell.Value)) > cell.ColumnWidth Then cell.ColumnWidth = Len(CStr(cell.Value)) End if Next cell 

(2)自动适合柱子:

 Dim myRange As Range Set myRange = Application.Range("A1:E5") Dim cell As Excel.Range For Each cell in myRange.Cells If Len(CStr(cell.Value)) > cell.ColumnWidth Then cell.Columns.AutoFit End if Next cell 

但是,如果我们要自动调整列,那么直接调用它就容易多了,而不必首先检查列的宽度,因为不仅一次可以修正所有单元格的宽度,而且Range.AutoFit方法可以处理任何字体,包括任何风格的非比例字体。

因此,直接进入自动拟合方法,我们有两个select:自动填充列或自动填充行。 根据你最近的报价,这听起来像你想重新调整的大小:

我真的只是寻找东西来扫描任何单元格的文本显示的文本比单元格将允许适合宽,从而需要行高度更大的单元格。

为此,我将使用文本包装,然后自动安装行。 例如,

 Dim rng As Excel.Range Set rng = Application.Range("A1:E5") With rng.Rows .WrapText = True .AutoFit End With 

我认为这些都是你的select。 最后,你想做什么和Excel能做什么可能不完全匹配,但我认为你应该能够完成你所需要的? 让我们知道它是否有诀窍…

迈克