如一个学生的成绩表,总分排序一次把排名的学生姓名和排名复制到一个新的表里,语文科再排名一次再复制到新的表里,各个科目都这样操作一次
Sub SortAndCopy()
Dim wb As Workbook
Dim wsSrc As Worksheet
Dim wsDst As Worksheet
Dim rngSrc As Range
Dim rngDst As Range
Dim i As Long
'打开当前工作簿
Set wb = ThisWorkbook
'选择源工作表
Set wsSrc = wb.Sheets("成绩表")
'选择源数据范围
Set rngSrc = wsSrc.Range("A1").CurrentRegion
'按总分排序
rngSrc.Sort Key1:=rngSrc.Range("C2"), Order1:=xlDescending, Header:=xlYes
'创建新工作簿
Set wsDst = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count))
wsDst.Name = "总分排名"
'复制排名数据到新工作表
Set rngDst = wsDst.Range("A1")
rngSrc.Copy rngDst
'添加排名列
wsDst.Columns("D:D").Insert Shift:=xlToRight
wsDst.Range("D1").Value = "排名"
wsDst.Range("D2").FormulaR1C1 = "=RANK(RC[-1],R2C3:R" & rngSrc.Rows.Count + 1 & "C3)"
wsDst.Range("D2").AutoFill Destination:=wsDst.Range("D2:D" & rngSrc.Rows.Count + 1)
'按语文科目排序
rngSrc.Sort Key1:=rngSrc.Range("D2"), Order1:=xlDescending, Header:=xlYes
'创建新工作簿
Set wsDst = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count))
wsDst.Name = "语文排名"
'复制排名数据到新工作表
Set rngDst = wsDst.Range("A1")
rngSrc.Copy rngDst
'添加排名列
wsDst.Columns("E:E").Insert Shift:=xlToRight
wsDst.Range("E1").Value = "排名"
wsDst.Range("E2").FormulaR1C1 = "=RANK(RC[-1],R2C4:R" & rngSrc.Rows.Count + 1 & "C4)"
wsDst.Range("E2").AutoFill Destination:=wsDst.Range("E2:E" & rngSrc.Rows.Count + 1)
'清除源数据排序
rngSrc.Sort Key1:=rngSrc.Range("A1"), Order1:=xlAscending, Header:=xlYes
'选择第一个工作表
wb.Sheets(1).Activate
'其他排名同上
End Sub
3.实现的结果如下: