Excel学习笔记002-002:工作表内及工作表间、工作簿间单元格数据的复制、剪切、粘贴;如何进行成绩排序。

问题提示:本次主要是想解决如何在工作表内部、工作表间、工作簿间进行单元格数据的复制、剪切、粘贴等操作,在工作中,经常需要进行数据的复制与粘贴,尤其是在工作表内进行操作,而且很多时候都是按班内名次排好序后,然后自动筛选出各个班的名单另存为新的工作簿,以便于分发至各班主任手中,以前主要是通过手工操作,或者是通过数据库技术,反正感觉不是很舒服。现在主要是想解决这个问题!!

这样的话就有以下几个问题需要解决:①如何排序?②如何筛选?③如何提取数据至新表(第1种还在原工作簿内;第2种存储至新工作簿内),并保留原格式不变?④在③的基础上,如果再能解决自定义筛选的话比如提取各班前40名学生名单,或者学籍号不为空的学生名单的话,那就更好。

先来解决第①个问题:如何排序?

原图如下:

image

也可能是无序排序,比如只是按考试号排序,现在要做的是先按班级升序排列,再按序号升序排列。

源程序如下:

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也可以放在最后,位置任意.

执行后截图如下:

image

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关键字.最后还要说明有无标题行.

验证文件提取链接>

菊子曰 今天你菊子曰了么?
posted @ 2010-03-05 12:12  surfacetension  阅读(742)  评论(0编辑  收藏  举报