人气 4826

Excel 合并单元格的数据表进行排序 [复制链接]

张淮程 2017-8-28 16:55:03
由于公司需要统计人数并且排序。但是由于表格设置的问题,里面有合并单元格,不能直接处理。如下图数据,希望按合计人数进行升序排列。这里我们用VBA代码去处理源数据:

1503910097695006.jpg

1503910097695006.jpg

详细VBA代码:Sub sortMerge()  Dim i As Integer  Dim j As Integer  Dim k As Integer  Dim ArrTemp() As Long  Dim ArrSort() As Long  Application.ScreenUpdating = False  i = 2  ReDim ArrTemp(1 To 4, 1 To 1) '  以下循环将A列中各合并单元格的起始行号和终止行号保存在数组ArrTemp的第一行和第二行相应项目中, '  同时在数组ArrTemp的第三行中写入排序标志项的内容(即各人数合计单元数值);  Do While Cells(i, 1)  ""    k = k + 1    ReDim Preserve ArrTemp(1 To 4, 1 To k)    ArrTemp(1, k) = i    i = i + Cells(i, 1).MergeArea.Cells.Count    ArrTemp(2, k) = i - 1    ArrTemp(3, k) = Cells(i - 1, 3)  Loop '  以下双循环通过比较标志项的方法,在数组的第4行中保存各标志项数值在所有数值中的大小顺序, '  此处填入的数据为所有标志项数值中小于相应标志项数值的个数  For i = 1 To k - 1    For j = i + 1 To k      If ArrTemp(3, i) > ArrTemp(3, j) Then        ArrTemp(4, i) = ArrTemp(4, i) + 1      Else        ArrTemp(4, j) = ArrTemp(4, j) + 1      End If    Next j  Next i  ReDim ArrSort(1 To k, 1 To 2) '  以下循环根据数组ArrTemp中第4行的数值按升序调整各合并单元格始末位置的顺序  For i = 1 To k    ArrSort(ArrTemp(4, i) + 1, 1) = ArrTemp(1, i)    ArrSort(ArrTemp(4, i) + 1, 2) = ArrTemp(2, i)  Next i '  以下循环按数组ArrSort的顺序复制相应行到原数据列表的下面  For i = k To 1 Step -1    Rows(ArrSort(i, 1) & ":" & ArrSort(i, 2)).Copy    Rows(ArrTemp(2, k) + 1).Insert shift:=xlDown  Next i  Rows("2:" & ArrTemp(2, k)).Delete  Application.ScreenUpdating = TrueEnd Sub
运行效果图:

1503910301114688.jpg

1503910301114688.jpg

参考至:小智雅汇(头条号)
您需要登录后才可以回帖 登录 | 立即注册

QQ|手机版|精益人 ( 沪ICP备19004111号-1 )|网站地图

GMT+8, 2024-12-23 04:42 , Processed in 0.252943 second(s), 22 queries .

Powered by Lean.ren X3.5 Licensed  © 2001-2030 LEAN.REN