在办公室环境中,使用其他人创建的Excel文件并不罕见。其中一些文件可能与您可能创建的文件完全不同。例如,您可以继承一个文件,其中第一列在第一行包含一个人的名字,然后在第二行包含一个人的名字。 (用户按Alt + Enter可以在同一单元格中将名字和名字分开。)如果需要根据人员的姓氏对工作表中的行进行排序,该怎么办?

完成此任务的最佳方法也许是在工作表中插入新列B列。(此列可能是隐藏的,因此在正常使用工作表或将其打印时不会显示。)然后应将公式放在B列的每个单元格中:

=RIGHT(A2,LEN(A2)-FIND(CHAR(10),A2))

显然,单元格引用在放入B列时将发生变化。在此公式中,FIND部分确定Alt + Enter字符的位置(此字符的字符代码为10)。 RIGHT函数返回单元格中的字符,从Alt + Enter字符后的字符开始。此解决方案导致B列包含第一列第二行中的信息。然后,您可以根据B列中的信息轻松进行排序。

在此解决方案中做出了一个假设-列A的每个单元格中只有两行。如果有更多或更少的内容,则解决方案将变得更加困难。如果是这种情况,最好的(也是最简单的)解决方案可能是重新设置工作表的格式,以便排序键本身就位于一列中。如果由于某种原因这是不可能的,则可以使用以下用户定义的VBA函数:

Function SecLine(x) As String     Dim B1 As Integer     Dim B2 As Integer          B1 = InStr(x, Chr(10))

B2 = InStr(B1 + 1, x, Chr(10))

If (B1 + B2) > 0 Then         If B2 > 0 Then             SecLine = Mid(x, B1 + 1, B2 – B1 - 1)

Else             SecLine = Mid(x, B1 + 1)

End If     End If End Function

要使用此例程,只需在B列的单元格中包含以下内容:

=SecLine(A2)

不管单元格A2中有多少行(在这种情况下),该函数都会返回一个表示第二行值的字符串。

注意:

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

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

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

本技巧(2252)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

链接:/ excelribbon-Non-standard_Sorting [非标准排序]。