用合并单元格对行进行sorting的自动化

通常在使用excel的时候我尽量避免使用合并的单元格,但是我们从pipe理软件中得到了一些生成的表格,

例

在search后,我发现最简单的过程是非合并sorting,然后再次合并,但是对于表格的headersheet number of sheets变得单调,已知融合的单元格(I + J,M + N)和表格开始在第11行所以plage被设置,所以有一个macros可以自动化的过程?

编辑:

我调整了unmerge代码,然后合并部分,但需要进行sorting,并有一个比这更干净的代码

 Sub Merge_fused() '~~> unmerged range Dim MyRange As Range Set MyRange = Range("H11:X56") '~~> merged columns Dim IRange As Range Set IRange = Range("I11:J56") Dim MRange As Range Set MRange = Range("M11:N56") Dim VRange As Range Set VRange = Range("V11:W56") On Error Resume Next With MyRange .UnMerge End With '~~> i need to sort here the MyRange here With IRange .Merge True End With With MRange .Merge True End With With VRange .Merge True End With End Sub 

我会做一个自动unmerge,然后扔掉空的单元格popup。 所以:之后不重新合并。 这样,您可以随时根据需要随时对数据进行分类。 下面的代码就是这样做的(它也会在数据表的末尾插入空白单元格,以防万一任何东西在右边的表格后面)。

 ' Unmerges the given column over the given rows Sub UnmergeDataColumn( _ theSheet As Worksheet, _ firstCell As Range, lastCell As Range, _ columnNrAfterTable As Long, _ startMergedColumn As String, endMergedColumn As String _ ) ' Unmerge the merged columns Dim mergedColumns As Range Set mergedColumns = theSheet.Range( _ startMergedColumn & firstCell.Row, _ endMergedColumn & lastCell.Row _ ) Call mergedColumns.UnMerge ' Throw away all unneeded cells Dim emptyColumn As Range Set emptyColumn = theSheet.Range( _ endMergedColumn & firstCell.Row, _ endMergedColumn & lastCell.Row _ ) Call emptyColumn.Delete(xlShiftToLeft) ' And insert extra padding after the table Dim trailingColumn As Range Set trailingColumn = theSheet.Range( _ theSheet.Cells(firstCell.Row, columnNrAfterTable), _ theSheet.Cells(lastCell.Row, columnNrAfterTable) _ ) Call trailingColumn.Insert(xlShiftToRight) End Sub Sub UnmergeData() ' Get the sheet Dim theSheet As Worksheet Set theSheet = Worksheets("Sheet1") ' Get the range of our table Dim firstCell As Range Set firstCell = theSheet.Range("K11") Dim lastCell As Range Set lastCell = theSheet.Range("X11").End(xlDown) Dim columnNrAfterTable As Long columnNrAfterTable = lastCell.Offset(0, 1).Column ' And unmerge the columns Call UnmergeDataColumn( _ theSheet, _ firstCell, lastCell, _ columnNrAfterTable, _ "V", "W" _ ) Call UnmergeDataColumn( _ theSheet, _ firstCell, lastCell, _ columnNrAfterTable, _ "M", "N" _ ) Call UnmergeDataColumn( _ theSheet, _ firstCell, lastCell, _ columnNrAfterTable, _ "I", "J" _ ) End Sub