玛丽有几个电子表格,每个电子表格之间有10,000-80,000行。

有时,列的宽度应大于其应有的宽度,这可能是由于内容使其变宽了。因此,玛丽想知道是否有一种简单的方法来找到最宽的单元格,而无需滚动10,000-80,000行来查找它。

有几种方法可以解决此问题,但出于本技巧的目的,我将仅描述其中三种。如果可以利用工作表中的帮助器列,第一种方法很简单。假设您要检查的列为A。您可以将此公式放在未使用的列的第一个单元格中:

=LEN(TRIM(A1))

将公式复制到所需的尽可能多的单元格,然后使用Excel的筛选功能显示该列中的最大值。这将为您提供所需的细胞。

第二种基于公式的方式是使用类似于以下的公式:

=MIN(IF(LEN($A:$A)=MAX(LEN($A:$A)),ROW($A:$A),1048577))

=CELL("address",INDEX($A:$A,MATCH(MAX(LEN($A:$A)),LEN($A:$A),0)))

通过按Ctrl + Shift + Enter,这两个都应作为数组公式输入。第一个公式将返回列A中具有最长长度的单元格的行号。第二个公式返回长度最长的单元的实际地址。

如果您需要定期找出较长的长度,则第三种方法很好。它涉及使用宏来导出必要的信息:

Sub FindWidestCells()

Dim Ad(10) As String     Dim Le(10) As Integer     Dim J As Integer     Dim K As Integer     Dim L As Integer     Dim lCols As Long     Dim lRows As Long     Dim Rng As Range     Dim c As Range     Dim sTemp As String

lCols = ActiveCell.Column     lRows = Cells(Rows.Count, lCols).End(xlUp).Row     Set Rng = Range(Cells(1, lCols), Cells(lRows, lCols))



For Each c In Rng         ' Find shortest length in the group         K = 1         For J = 2 To 10             If Le(J) < Le(K) Then K = J         Next J         If Len(c.Text) > Le(K) Then             Le(K) = Len(c.Text)

Ad(K) = c.Address         End If     Next c

' Sort the cells     For J = 1 To 9         L = J         For K = J + 1 To 10             If Le(K) > Le(L) Then L = K         Next K         If L <> J Then             sTemp = Ad(L)

Ad(L) = Ad(J)

Ad(J) = sTemp             K = Le(L)

Le(L) = Le(J)

Le(J) = K         End If     Next J

sTemp = "Longest cells:" & vbCr     For J = 1 To 10         If Le(J) > 0 Then             sTemp = sTemp & "    " & Ad(J) & " (" & Le(J) & ")" & vbCr         End If     Next J

MsgBox sTemp End Sub

您需要做的就是在要检查的列中选择一个单元格,然后运行宏。返回的是列中10个最宽单元格的列表,根据长度从大到小排列。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本提示(13747)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。