Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2412|回复: 7

含有总标题及列标题的如何数据排序

[复制链接]
发表于 2020-5-20 08:56 | 显示全部楼层 |阅读模式
本帖最后由 向前650809 于 2020-5-20 09:00 编辑

对于有总标题,列标题的区域按某一列标题排列,如按英语降序排列,升序排列
请指导,谢谢
排序.png
发表于 2020-5-20 09:11 | 显示全部楼层
    Range("a1").CurrentRegion.Offset(1).Sort key1:=[b1], _
                                             order1:=xlAscending, _
                                             Header:=xlYes

评分

参与人数 1学分 +3 收起 理由
向前650809 + 3 学习

查看全部评分

回复

使用道具 举报

发表于 2020-5-20 09:17 | 显示全部楼层
利用系统的单元格排序很简单,就一行代码。看不清你行列,我就举个例子:
Range("a2:h30").Sort key1:=Range("b2"), order1:=xlAscending, Header:=xlYes
其中:
key1:=Range("b2"), 排序键值,以b2列排序
order1:=xlAscending ,升序,默认是升序,如果升序可省略。另外命名参数不好记忆,用数字1或2代替也可以,1 是升序,2是降序
Header:=xlYes,表示有标题,指明了引用区域的第一行是标题行,引用区域是a2:h30,标题行就是第二行,数据从第三行开始

还有很多其他的参数,我觉得就这三个最有用,其他的都不常用

评分

参与人数 1学分 +3 收起 理由
向前650809 + 3 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-5-22 07:06 | 显示全部楼层
如果表示的数据区域行列号中有变量,如何表示呢
如由A2到第m行第n列,如何表示这一区域呢
回复

使用道具 举报

发表于 2020-5-22 08:42 | 显示全部楼层
本帖最后由 hfwufanhf2006 于 2020-5-22 08:45 编辑
向前650809 发表于 2020-5-22 07:06
如果表示的数据区域行列号中有变量,如何表示呢
如由A2到第m行第n列,如何表示这一区域呢

一般来说,起始行和列数是固定的,只有最末行是变化的,因此把最前面的区域引用改用变量替换:
Range("a2:h30")改成:
Range("a2:h" & [a65000].end(3).row)    '从a2行到最末行
如果你的行列变量是已知的,那就简单了,假设行变量是m,列变量是 n
rang("a2:" & n & m)

如果行、列变量都不知道,可以用楼上爱疯版主的方法,用CurrentRegion来识别数据区,这个方法最简单;

如果自己代码功底也比较深,也可以用自定义代码识别,比如:
     [a2].end(2).column:从a2向右连续数据的末尾列,这里指连续数据,遇到第一个空单元格就停止;
     [aa2].end(1).column:从[aa2]向左遇到的第一个数据单元格列号
     [a2].end(2).address : 从a2向右连续数据的末尾列的绝对地址
上面这些只能得到类似“$H$2”这样的地址,然后再进行截取变换也能变成数据区域,比如:
range("a2:" & Mid(Cells(2, [a2].End(2).Column).Address, 2, 1) & [a65000].End(3).Row)
其中:
Mid(Cells(2, [a2].End(2).Column).Address, 2, 1)是截取"$h$2"中的字母"h"
[a65000].End(3).Row 是获得最末行,如果实际的最末行是30,上面的结果就是 range("a2:h30")


评分

参与人数 1学分 +3 收起 理由
向前650809 + 3 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-5-22 13:50 | 显示全部楼层
rang("a2:" & n & m),这个表示到m行n列吗,列数在前行数在后吗

[a2].end(2).column,这不太明白
回复

使用道具 举报

发表于 2020-5-22 15:05 | 显示全部楼层
向前650809 发表于 2020-5-22 13:50
rang("a2:" & n & m),这个表示到m行n列吗,列数在前行数在后吗

[a2].end(2).column,这不太明白

单元格的表示方法是:   range("a2:h30")
对照
  range("a2:" & n & m)
n就相当于上面的 h,m就相当于上面的 30,n\m谁用来代表行谁用来表示列不重要,你把顺序搞对就行了;

至于[a2].end(3).column,如果你完全没了解,就忽略它,要用好它需要有一定基础,几句话讲不明白;

评分

参与人数 1学分 +3 收起 理由
向前650809 + 3 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-10-24 08:19 | 显示全部楼层
order1:=xlAscending
这是升序的吧,降序的代码呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 11:23 , Processed in 0.290076 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表