ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 如何运用VBA提取各车间收入排名前十的记录到新工作表中并各自进行降序排列呢?

如何运用VBA提取各车间收入排名前十的记录到新工作表中并各自进行降序排列呢?

作者:绿色风 分类: 时间:2022-08-18 浏览:116
楼主
0Mouse
Q:如何运用VBA提取各车间收入排名前十的记录到新工作表中并各自进行降序排列呢?
数据表:

 
结果表:

 
A:代码如下:
  1. Sub 运用VBA提取各车间收入排名前十的记录到新工作表中并各自进行降序排列()
  2.     Dim r%, arr, i%, j%, k%, brr, crr, z%
  3.     On Error Resume Next    '如果“提取”工作表不存在,删除时会出错,故加上容错语句。
  4.     Application.DisplayAlerts = False
  5.     Sheets("提取").Delete
  6.     Application.DisplayAlerts = True
  7.     Sheet1.Copy , Sheet1    '复制Sheet1,放置在Sheet1右侧。
  8.     ActiveSheet.Name = "提取"
  9.     [I1] = "辅助"
  10.     [I2] = "=IF(A2=A1,I1,N(I1)+1)"    '公式辅助列用于保持各车间的先后顺序不变。
  11.     r = Cells(Rows.Count, 1).End(xlUp).Row
  12.     Range("I2").AutoFill Range("I2:I" & r)    '填充公式
  13.     Range("A1:I" & r).Sort Key1:=Range("I2"), Order1:=xlAscending, Key2:=Range _
  14.         ("F2"), Order2:=xlDescending, Header:=xlYes, OrderCustom:=1, MatchCase _
  15.         :=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
  16.         xlSortNormal, DataOption2:=xlSortNormal    '以“辅助”为第一关键字,以“收入”为第2关键字排序。
  17.     arr = Range("A1:I" & r + 1).Value
  18.     ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2) - 1)
  19.     j = 1: z = 1
  20.     For k = 1 To UBound(brr, 2)
  21.         brr(z, k) = arr(2, k)
  22.     Next
  23.     For i = 3 To UBound(arr)
  24.         If arr(i, UBound(arr, 2)) = arr(i - 1, UBound(arr, 2)) Then
  25.             j = j + 1
  26.             If j <= 10 Then
  27.                 z = z + 1
  28.                 For k = 1 To UBound(brr, 2)
  29.                     brr(z, k) = arr(i, k)
  30.                 Next
  31.             End If
  32.         Else
  33.             j = 1: z = z + 2    '各车间记录之间插入一个空行,故加2。
  34.             For k = 1 To UBound(brr, 2)
  35.                 brr(z, k) = arr(i, k)
  36.             Next
  37.         End If
  38.     Next
  39.     Range("2:" & Rows.Count).ClearContents    '清除第2行以下的所有记录
  40.     [I1] = ""
  41.     [A2].Resize(z, UBound(brr, 2)) = brr
  42.     Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1 & ":A" & Rows.Count).EntireRow.Delete    '删除多余边框线所在的行
  43.     [A1].Select
  44. End Sub
附件:
运用VBA提取各车间收入排名前十的记录到新工作表中并各自进行降序排列.rar
2楼
纵鹤擒龙水中月
学习了
3楼
初学者2012
学习了**!
4楼
张雄友
太强大了。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap