这是你的输入格式的问题,你输入的格式一定是文本,这从9.30与10.1可以看出!文本的升序不同于日期和数值的升序,文本的升序是首字0123456789,而不是数值的大小和时间的先后。要实现它的解决办法是:将文本格式转换为常规的日期,或者将文本格式的位数补足,如9.30补足为09.30;10.1补足为10.01,这样就可能排序了。这样一个个手工替补实在是太麻烦了,有什么简单的方法吗?回答是肯定的,有!怎么操作呢?看附图
要点:在C1中输入公式
=LEFT(B1,SEARCH(".",B1)-1)&TEXT(RIGHT(B1,LEN(B1)-SEARCH(".",B1)),"00")
然后复制或下拉或ctrl_D填充。
详细过程说明:
我添加几项数据(含*),成为如下为区域 A1:B10 的内容:
白明奎 9.30
李元宝 10.1
张净海 10.3
赵奎武 10.4
*** 9.2
杨典生* 9.3
*** 9.4
*** 9.24
*** 9.27
何冬州* 10.4
步骤:
一:在C1中输入公式
=LEFT(B1,SEARCH(".",B1)-1)&TEXT(RIGHT(B1,LEN(B1)-SEARCH(".",B1)),"00")
将日期变成象身份证中的生日数字一样,然后对以C列为基准排列,就好办了。
公式说明:
利用字符串查找函数search(".",B1)返回"."在B1中的位置,就不必根据字符"."对数据进行分列;
利用函数TEXT(RIGHT(B1,LEN(B1)-SEARCH(".",B1)),"00")对日期数字规范成格式"00",不足的前面添加0成为两位数字。这样就不用在分列的基础上再设置单元格格式了。
最后用取左(右)字符串函数及字符串联结运算符&,一个公式完成了改造。
外一则:看了
http://passport.baidu.com/?business&aid=6&un=%E4%EC%C8%F7%C8%CB%C9%FD#2的解答,发现用公式:
=LEFT(B12,SEARCH(".",B12)-1)&"月"&RIGHT(B12,LEN(B12)-SEARCH(".",B12))&"日"
然后再利用下面过程,排序也一样符合要求。
二:选中C1:C10,按ctrl_D向下填充公式。
三:再选中A1:C10,按C列升序排列得到:
注:
alt_DS(菜单"数据-排列)-升序-主要关键字下拉选择:列C-确定(回车)-将任何类似数字的内容(除数字自身外包括文本)(按数字方式)排列
结果如下:
*** 9.2 902
杨典生* 9.3 903
*** 9.4 904
*** 9.24 924
*** 9.27 927
白明奎 9.30 930
李元宝 10.1 1001
张净海 10.3 1003
何冬州* 10.4 1004
赵奎武 10.4 1004
外一则:
当然还可以改写公式,使之更严格和更普遍适用,如有写了年份有些又省略了默认年份的情况。此时月份也要约束为两位的格式,还要查找年份,条件处理。逢实际情况处理,略。
可以理解工作量大的问题,但是如果你用这种类似小数的形式表示日期,不把单元格改成标准日期格式的话,在excel 2003里面可能比较难实现。
我用的是excel 2007,在2007里面可以自定义序列,就是按照从小到大自己定义排序的序列,只要按照9.30 10.1 10.2 10.3的顺序输进去就可以排序成功了。至于怎么样得到一年这么多的日期,可以手工打,也可以在表格中进行顺序填充,注意调整下步长就可以。
我不知道2003里面有没有相类似的自定义序列,需要楼主自己寻找下。当然,如果可以在2003里面用很简便的方法实现,那我也要学习下。
你的表述不明确,你说工作量太大,但看你的几个数据看不出复制哦:点姓名任一格——工具栏——升序排序。
不就成了?
需要将存储日期的数据列设定为日期格式,可以通过选定日期数据列,单击鼠标右键,选择“设置单元格格式”,在对话框中指定日期格式,并指定日期数据的表达格式。
按文本字符串处理,10.4肯定得排在9.30之前啊。