1职场实例

小伙伴们大家好,今天我们来解决一个Excel在职场中的棘手问题:如何对单元格内强制换行产生的多行内容进行排序?这个问题由于受到Excel基础排序功能的制约,不能够直接进行自定义的排序,所以需要间接的通过几个步骤快速的达成。

如下图所示:

A列内容为排序前的内容,每个单元格内分别有三行内容,分别为“姓名”、“性别”、“电话”内容,我们观察到单元格内每行内容之间的分行是由(Alt+回车强制换行产生的。由于输入时的不规范,造成单元格内每行内容顺序不太一致,现在想要对单元格内强制换行产生的多行内容进行排序,顺序为“姓名→性别→电话”

单元格内分行数据自定义排序,Excel之大,无奇不有!_自定义

2解题思路

想要实现对单元格内强制换行产生的多行内容进行自定义排序,我们需要通过几个步骤进行设置才能够实现,下面我们就来简单的讲解一下原理

单元格内分行数据自定义排序,Excel之大,无奇不有!_数据_02

第一步:分列


首先我们需要对A列内容进行分列,将“姓名”、“性别”、“电话”内容分别放置到三列中显示。我们通过选中A列数据,点击【数据-分列】,使用【分隔符号】进行分列,【分隔符号】应该是强制换行符。在微软Office Excel中强制换行符我们可以通过键盘上的【Ctrl+j】快捷键进行输入(会出现一个闪动的小点,即为强制换行符)。【目标区域】选择从B2单元格为起始位置放置分列好的数据。最后点击【完成】即可实现分列。


但是分列出来每行的列数据顺序依然是不一致的。

单元格内分行数据自定义排序,Excel之大,无奇不有!_换行符_03


第二步:VBA代码排序


我们选中分列出来的数据区域B2:D4,右击工作表名称标签,点击【查看代码】,在弹出的VBA代码编辑窗口,将下面的代码模板复制粘贴到其内。最后点击【运行-运行子过程/用户窗体】,即可实现排序效果。


我们发现分列出来每行的列数据顺序终于一致了,但需要调整一下具体的位置顺序为:“姓名→性别→电话”。


代码如下:

Sub SortIndividualR()
'Updateby Excel情报局
    Dim xRg As Range, yRg As Range
    If TypeName(Selection) <> "Range" Then Exit Sub
    Set xRg = Selection
    If xRg.Count = 1 Then
        MsgBox "Select multiple cells!", vbExclamation, "公众号:Excel情报局"
        Exit Sub
    End If
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
    Application.ScreenUpdating = False
    For Each yRg In xRg.Rows
        yRg.Sort Key1:=yRg.Cells(1, 1), _
        Order1:=xlAscending, _
        Header:=xlNo, _
        Orientation:=xlSortRows
    Next yRg
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
    Application.ScreenUpdating = True
End Sub

单元格内分行数据自定义排序,Excel之大,无奇不有!_换行符_04


第三步:调整列顺序为自定义顺序


我们可以通过【剪切】列数据,选择对应的列位置后右击【插入剪切的单元格】,快速调整列的位置到自己想要的位置。如下图所示:

单元格内分行数据自定义排序,Excel之大,无奇不有!_自定义_05


第四步:合并数据恢复原样


我们在E2单元格输入函数公式:

=B2&CHAR(10)&C2&CHAR(10)&D2


在Excel的公式中我们用函数CHAR设置参数值10,即CHAR(10)代表强制换行符,通过连接符&将各个数据与强制换行符进行连接合并。


最后在选中E列的结果点击【自动换行】功能,即可恢复到原始数据的单元格内分行显示效果。

单元格内分行数据自定义排序,Excel之大,无奇不有!_自定义_06