Excel长期以来一直具有将相邻单元合并为更大的单个单元的功能。许多工作表设计人员已使用此功能为工作表赋予抛光的专业外观。

但是,使用合并的单元格存在一个巨大的缺点:您不能对包含它们的表进行排序。如果您尝试这样做,则会收到一条消息,提示“该操作要求合并的单元格具有相同的大小”。

解决此问题的最明显方法是不使用合并的单元格。

例如,假设您有一个工作表,其中每个“记录”实际上都由两行组成,并且工作表的第一列包含合并的单元格。 (每个两行记录都从跨越两行的两个合并单元格开始。此合并单元格包含一个项目名称。)

最好不要合并第一列中的单元格,但是您可能想知道如何使记录在工作表中正确排序。如何在排序期间将行对保持在一起。您可以通过在第一行中输入项目名称,在第二行中添加项目名称并附加“ zz”来实现。例如,如果第一行包含“ Wilburn Chemicalzz”(项目名称),则第二行可以包含“ Wilburn Chemicalzz”。格式化第二行的单元格,使其名称不显示(例如白色背景上的白色文本),然后您就可以根据需要成功进行排序。

另一个解决方案是使用宏来处理您的工作表并完成排序。假设合并的单元格在A列中(如前所述),则可以使用以下宏按A列的内容对数据进行排序:

Sub SortList()

Dim sAddStart As String     Dim rng As Range     Dim rng2 As Range     Dim lRows As Long

Application.ScreenUpdating = False     sAddStart = Selection.Address     Set rng = Range("A1").CurrentRegion

With rng         lRows = .Rows.Count - 1         .Cells(1).EntireColumn.Insert         .Cells(1).Offset(0, -1) = "Temp"

.Cells(1).Offset(1, -1).FormulaR1C1 = _           "=+RC[1]&"" ""&ROW()"

.Cells(1).Offset(2, -1).FormulaR1C1 = _           "=+R[-1]C[1]&"" ""&ROW()"

Set rng2 = .Cells(1).Offset(1, -1).Resize(lRows, 1)

Range(.Cells(2, 0), .Cells(3, 0)).AutoFill _             Destination:=rng2         rng2.Copy         rng2.PasteSpecial Paste:=xlValues

.Columns(1).MergeCells = False

.CurrentRegion.Sort _         Key1:=Range("A2"), Order1:=xlAscending, _         Header:=xlYes, OrderCustom:=1, _         MatchCase:=False, Orientation:=xlTopToBottom

rng2.EntireColumn.Delete

With Range(.Cells(2, 1), .Cells(3, 1))

.Merge             .Copy             .Cells(3, 1).Resize(lRows - 2, 1). _                 PasteSpecial Paste:=xlFormats         End With     End With     Application.CutCopyMode = False     Range(sAddStart).Select     Application.ScreenUpdating = True End Sub

宏插入一个临时列,从列表的第一列中读取项目,追加行号,将其复制到该临时列下,对单元格进行合并,对该列表进行排序,删除该临时列,然后重新合并A列。 (仅是对带有合并单元格的表进行排序就需要大量工作!)

此宏非常特定于您的数据的特定布局,因此需要对其进行测试,并可能需要对其进行修改,以确保它可以与以任何其他方式格式化的数据一起使用。

注意:

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

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

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