Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: yjwdjfqb

[已解决]再次求助:VBA_鼠标选取当前列自定义排序-求修改代码

  [复制链接]
 楼主| 发表于 2012-2-7 00:29 | 显示全部楼层
爱疯 发表于 2012-2-7 00:25
问题解决了么

辛苦老师了,我比较了下,附件6要好些!
真的很感谢老师。

回复

使用道具 举报

 楼主| 发表于 2012-2-7 00:35 | 显示全部楼层
爱疯 发表于 2012-2-7 00:25
问题解决了么

如果老师,有时间帮我研究下,像这样行不行

就是,当我点C4时,就从第四行(包括第四行)以下,开始排序,排序的列是C列,其它的都不用考虑,

也不用再设置排序的操作区域(直接第四行(包括第四行)以下所有行)

以“选定扩展方式”排序
回复

使用道具 举报

 楼主| 发表于 2012-2-7 00:36 | 显示全部楼层
爱疯 发表于 2012-2-7 00:25
问题解决了么

老师,你还有时间吧,我等你帮我做下。。。
回复

使用道具 举报

发表于 2012-2-7 00:42 | 显示全部楼层
yjwdjfqb 发表于 2012-2-7 00:29
辛苦老师了,我比较了下,附件6要好些!
真的很感谢老师。

能解决就好。这问题我只是修改了如何选择数据源,绝大部分是happym8888帮忙写的。只是他这会儿没空,我恰好有点。要谢你要多谢谢他!

我觉得,应该再说明下,在求助时切勿重复发帖,这也是很多论坛的规定。为避免给大家造成不好的示范和习惯,你将受到一定处罚。希望你能理解并改正,继续支持论坛。
回复

使用道具 举报

发表于 2012-2-7 00:49 | 显示全部楼层
yjwdjfqb 发表于 2012-2-7 00:35
如果老师,有时间帮我研究下,像这样行不行

就是,当我点C4时,就从第四行(包括第四行)以下,开始排 ...

附件7.rar (20.55 KB, 下载次数: 5)
回复

使用道具 举报

 楼主| 发表于 2012-2-7 00:56 | 显示全部楼层
爱疯 发表于 2012-2-7 00:49
仅排序第N列(所选行到N列最后行),会造成记录乱套。建议不使用。

我愿意接受论坛对我的处罚,我以后一定按论坛的规定。

我想起来了,附件6中,既然后以序号列来作为判断,老师以附件6为基础,加一个重新编写序号的语句进去吧,因为排序后序号乱了
回复

使用道具 举报

发表于 2012-2-7 01:21 | 显示全部楼层

RE: 再次求助:VBA_鼠标选取当前列自定义排序-求修改代码

yjwdjfqb 发表于 2012-2-7 00:56
我愿意接受论坛对我的处罚,我以后一定按论坛的规定。

我想起来了,附件6中,既然后以序号列来作为判断 ...

不知我理解对不对,如果说”以附件6为基础,加一个重新编写序号的语句进去...”,那么按科室名先执行的排序,会因序号排序而还原。
对于现在这个问题,你可以只保留很少的记录,但足够说明各种可能的变化。比如保留5行记录和1行表头,共6行。先手动操作看看,能否达到预期效果。如果可以实现,再考虑代码实现。所以,先手动试试看。
回复

使用道具 举报

 楼主| 发表于 2012-2-7 08:32 | 显示全部楼层
爱疯 发表于 2012-2-7 01:21
不知我理解对不对,如果说”以附件6为基础,加一个重新编写序号的语句进去...”,那么按科室名先执行的排 ...

那我就,用手动编号算了。
回复

使用道具 举报

 楼主| 发表于 2012-2-7 08:47 | 显示全部楼层
爱疯 发表于 2012-2-7 01:21
不知我理解对不对,如果说”以附件6为基础,加一个重新编写序号的语句进去...”,那么按科室名先执行的排 ...

这样行不呢!

就是排序完成后,从“序号”下一个单元格从1开始编写序号,编写序号的终止单元格是,当前列最后一个有数据的单元格。
回复

使用道具 举报

发表于 2012-2-7 09:15 | 显示全部楼层
yjwdjfqb 发表于 2012-2-7 08:47
这样行不呢!

就是排序完成后,从“序号”下一个单元格从1开始编写序号,编写序号的终止单元格是,当前 ...

  1. Sub 科室排序()
  2.     Dim arr, i&, j&, c%, r&
  3.     '设置自定义排序的顺序
  4.     arr = Array("外妇科", "手术室", "内儿科", "西医科", "中医科", "耳鼻喉科", "放射科", "检验科", "B超室", "口腔科", "针灸科", "西药房", "中药房", "收费室", "疾控科", "合管办", "后勤科")
  5.     If Not Cells.Find("序号") Is Nothing Then
  6.         Set Rng = Cells.Find("序号").CurrentRegion
  7.         If Not Intersect(Rng, ActiveCell) Is Nothing Then
  8.             With Application
  9.                 .ScreenUpdating = False
  10.                 .AddCustomList ListArray:=arr
  11.                 i = .GetCustomListNum(arr)    '返回字符串数组的自定义序列号
  12.                 c = Rng.Item(1, 1).End(xlToRight).Column   '数据源最右侧列号
  13.                 r = Cells(65536, ActiveCell.Column).End(xlUp).Row    '所选单元格所在列最后一个数据的行号
  14.                
  15.                 '排序区域
  16.                 With Range(Cells(ActiveCell.Row, Rng.Column), Cells(r, c))
  17.                     '设置排序的起始单元格
  18.                     .Sort key1:=ActiveCell, order1:=xlAscending, _
  19.                           Header:=xlNo, OrderCustom:=i + 1
  20.                 End With
  21.                
  22.                 '重写序号
  23.                 For i = ActiveCell.Row + 1 To r '这句不清楚你是否要+1,你自己修改吧
  24.                     j = j + 1
  25.                     Cells(i, 1) = j
  26.                 Next i
  27.                
  28.                 .DeleteCustomList ListNum:=i
  29.                 .ScreenUpdating = True
  30.                 MsgBox "排序完成", vbInformation
  31.             End With
  32.         End If
  33.     End If
  34. End Sub
复制代码
附件8.rar (21.14 KB, 下载次数: 20)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 10:22 , Processed in 0.319100 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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