Excel学习笔记002-002:工作表内及工作表间、工作簿间单元格数据的复制、剪切、粘贴;如何进行成绩排序。
问题提示:本次主要是想解决如何在工作表内部、工作表间、工作簿间进行单元格数据的复制、剪切、粘贴等操作,在工作中,经常需要进行数据的复制与粘贴,尤其是在工作表内进行操作,而且很多时候都是按班内名次排好序后,然后自动筛选出各个班的名单另存为新的工作簿,以便于分发至各班主任手中,以前主要是通过手工操作,或者是通过数据库技术,反正感觉不是很舒服。现在主要是想解决这个问题!!
这样的话就有以下几个问题需要解决:①如何排序?②如何筛选?③如何提取数据至新表(第1种还在原工作簿内;第2种存储至新工作簿内),并保留原格式不变?④在③的基础上,如果再能解决自定义筛选的话比如提取各班前40名学生名单,或者学籍号不为空的学生名单的话,那就更好。
先来解决第①个问题:如何排序?
原图如下:
也可能是无序排序,比如只是按考试号排序,现在要做的是先按班级升序排列,再按序号升序排列。
源程序如下:
Sub 如何排序()
Range("A1:F1074").Sort Key1:=Range("B2"), Order1:=xlAscending, _
Header:=xlYes, Key2:=Range("A2"), Order2:=xlAscending
End Sub
优化后的源程序:
Sub 如何排序改进()
Dim totalR, totalC As Integer
totalR = Range("A1").CurrentRegion.Rows.Count'统计当前区域内非空数据的行数
totalC = Range("A1").CurrentRegion.Columns.Count'统计当前区域内非空数据的列数
Range(Cells(1, 1), Cells(totalR, totalC)).Sort Key1:=Range("B2"), Order1:=xlAscending, _
Header:=xlYes, Key2:=Range("A2"), Order2:=xlAscending
End Sub
释义:Range(Cells(1, 1), Cells(totalR, totalC)).Sort →对指定区域排序;Key1:=Range("B2"), Order1:=xlAscending,→第1关键字为B2,顺序为升序;
Header:=xlYes,→有标题行;Key2:=Range("A2"), Order2:=xlAscending→同时按第2关键字升序排序.
其中Header:=xlYes也可以放在最后,位置任意.
执行后截图如下:
Sub 如何排序实验()
Dim totalR, totalC As Integer
totalR = Range("A1").CurrentRegion.Rows.Count
totalC = Range("A1").CurrentRegion.Columns.Count
Range(Cells(2, 1), Cells(totalR, totalC)).Sort Key1:=Range("B1"), Order1:=xlAscending, _
Key2:=Range("A1"), Order2:=xlAscending
End Sub
与上面的程序代码不同的地方把cells(1,1)改为cells(2,1),这样就不用再添加Header:=xlYes了,因为从2,1开始到最后,不包括标题行,就没必要再注明是否有标题行了.最后的效果上面的截图一样.
反思:排序应该遵从对哪一部分区域进行排序,一般是对全部;若想按多个关键字进行排序,就要指定谁是第1关键字Key1,并同时指定第1关键字的排序是升序还是降序,同理指定第2关键字.最后还要说明有无标题行.