1职场实例
小伙伴们大家好,今天我们来解决一个Excel在职场中的棘手问题:如何对单元格内强制换行产生的多行内容进行排序?这个问题由于受到Excel基础排序功能的制约,不能够直接进行自定义的排序,所以需要间接的通过几个步骤快速的达成。
如下图所示:
A列内容为排序前的内容,每个单元格内分别有三行内容,分别为“姓名”、“性别”、“电话”内容,我们观察到单元格内每行内容之间的分行是由(Alt+回车)强制换行产生的。由于输入时的不规范,造成单元格内每行内容顺序不太一致,现在想要对单元格内强制换行产生的多行内容进行排序,顺序为“姓名→性别→电话”。
2解题思路
想要实现对单元格内强制换行产生的多行内容进行自定义排序,我们需要通过几个步骤进行设置才能够实现,下面我们就来简单的讲解一下原理。
第一步:分列
首先我们需要对A列内容进行分列,将“姓名”、“性别”、“电话”内容分别放置到三列中显示。我们通过选中A列数据,点击【数据-分列】,使用【分隔符号】进行分列,【分隔符号】应该是强制换行符。在微软Office Excel中强制换行符我们可以通过键盘上的【Ctrl+j】快捷键进行输入(会出现一个闪动的小点,即为强制换行符)。【目标区域】选择从B2单元格为起始位置放置分列好的数据。最后点击【完成】即可实现分列。
但是分列出来每行的列数据顺序依然是不一致的。
第二步: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
第三步:调整列顺序为自定义顺序
我们可以通过【剪切】列数据,选择对应的列位置后右击【插入剪切的单元格】,快速调整列的位置到自己想要的位置。如下图所示:
第四步:合并数据恢复原样
我们在E2单元格输入函数公式:
=B2&CHAR(10)&C2&CHAR(10)&D2
在Excel的公式中我们用函数CHAR设置参数值10,即CHAR(10)代表强制换行符,通过连接符&将各个数据与强制换行符进行连接合并。
最后在选中E列的结果点击【自动换行】功能,即可恢复到原始数据的单元格内分行显示效果。