非标准排序(Microsoft Excel)
在办公室环境中,使用其他人创建的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培训的来源。
本技巧(11925)适用于Microsoft Excel 2007、2010、2013和2016。您可以在下面的Excel的较旧菜单界面中找到此技巧的版本:“ link:/ excel-Non-standard_Sorting [非标准排序]”。