Excel 查找太小而无法显示内容的文本单元格

Excel 查找太小而无法显示内容的文本单元格,excel,vba,height,row,Excel,Vba,Height,Row,我有一个工作表,其中的单元格可能包含有时超过单元格宽度和高度的文本。如果我没有注意到并调整行高,文本将显示为截断。是否有人有VBA代码片段或工具可以定位这些单元格,以便我可以调整它们?谢谢 识别哪一列太宽将是一件棘手的事情,特别是因为单元格中的文本可能有不同的字体和/或字体大小。通过使用该方法,自动调整列的大小要容易得多 例如,可以按如下方式调用AutoFit方法: Dim myRange As Excel.Range Set myRange = Application.Range("A1:C3

我有一个工作表,其中的单元格可能包含有时超过单元格宽度和高度的文本。如果我没有注意到并调整行高,文本将显示为截断。是否有人有VBA代码片段或工具可以定位这些单元格,以便我可以调整它们?谢谢

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

例如,可以按如下方式调用AutoFit方法:

Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
myRange.Columns.AutoFit
但是,Range.AutoFit方法可能过于激进,导致列太窄。因此,您可能希望创建一个确定最小列宽的方法:

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
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
还可以自动调整范围中的行。这是不太经常需要的,但要做到这一点,您可以使用以下方法:

myRange.Rows.AutoFit
希望这有帮助

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


坦斯克麦克。使用此电子表格 作为web界面的结构化输入 生成器,使列宽发生变化 不应该调整。我真的很高兴 只是想找些东西来扫描一张照片 显示文本的任何单元格的工作表 显示的宽度大于单元格的宽度 将允许安装,因此需要 行高较大。我不是 寻找一个过程,使 调整,只要找到他们,因为他们 容易被忽视。有什么想法吗 那个

很明显,你需要做两件事:(1)确定哪些细胞被切断,然后(2)纠正这些切断

我确实理解您希望分两个不同的阶段来完成这项工作,但在Excel的所有情况下,步骤(1)几乎不可能正确完成,因为不仅行高和列宽可能不同,而且文本换行可以打开或关闭,字体可以是任意数量的潜在样式和/或大小的非比例字体

简而言之,如果没有大量的工作,就无法可靠地识别哪些细胞被切断。但是,如果您将电子表格限制为仅一种字体样式,并使用非比例字体,则可以减轻此问题。如果这样做,则可以简单地将列宽与单元格中文本的长度进行比较。这是因为该属性返回其已校准的宽度,以便一个列宽单位等于正常样式中一个字符的宽度。对于比例字体,使用字符0(零)的宽度

因此,对于简单的情况,如果不使用换行符且字体为正常样式,并且理想情况下,正常字体为非比例字体,则可以在该范围内的所有单元格中循环,查找保留的值是否大于列宽:

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
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
但现在下一部分来了。。。你将如何纠正这一点?同样,如果您有一个非常简单的情况,即不使用换行符,字体为正常样式,并且理想情况下,正常字体为非比例字体,那么您有几个选项:

(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
但是,如果我们要自动调整列,那么直接调用它就容易多了,而不必首先检查列宽,因为不仅所有单元格的宽度都会一次更正,而且该方法可以处理任何样式的任何字体,包括非比例字体

因此,直接转到自动调整方法,我们有两个选项:自动调整列或自动调整行。根据您最近的报价,听起来您想重新调整行的大小:

我真的很高兴 只是想找些东西来扫描一张照片 显示文本的任何单元格的工作表 显示的宽度大于单元格的宽度 将允许安装,因此需要 行高较大

为此,我将使用文本换行,然后自动调整行。比如说,

Dim rng As Excel.Range
Set rng = Application.Range("A1:E5")

With rng.Rows
    .WrapText = True
    .AutoFit
End With
我想这些都是你的选择。最后,你想做什么和Excel能够做什么可能并不完全匹配,但我认为你应该能够完成你需要做的事情?让我们知道它是否奏效


--迈克

坦斯克迈克。此电子表格用作web界面生成器的结构化输入,因此列宽不同,不应进行调整。我真的只是在寻找一些东西来扫描任何单元格,其中显示的文本比单元格允许的宽度更宽,因此需要更大的行高。我不是在寻找一个调整的过程,只是找到它们,因为它们很容易被忽视。你有什么想法吗?嗨,克雷格,很遗憾,你想做什么和Excel的能力可能不完全匹配。但我认为你应该能够完成你所需要的。我现在更新了我的回复,标题为“更新:回复克雷格的评论”。希望有帮助!