Excel精英培训网

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

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

  [复制链接]
发表于 2012-2-6 21:05 | 显示全部楼层
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2012-2-6 21:07 | 显示全部楼层
鼠标点击C列即可触发工作表事件。

VBA_鼠标选取当前列自定义排序-求修改代码-sj0206.rar

18.91 KB, 下载次数: 17

回复

使用道具 举报

 楼主| 发表于 2012-2-6 21:08 | 显示全部楼层
sunjing-zxl 发表于 2012-2-6 21:01
你工作表要改成什么样子。
该不会是大变样把

我的目的是,更改工作表时,我不更改VBA代码,也能正确进行排序
回复

使用道具 举报

发表于 2012-2-6 21:13 | 显示全部楼层
yjwdjfqb 发表于 2012-2-6 21:08
我的目的是,更改工作表时,我不更改VBA代码,也能正确进行排序

楼主,你试过这里10楼的代码没有?
http://www.excelpx.com/forum.php?mod=redirect&goto=findpost&ptid=221768&pid=3043919
回复

使用道具 举报

 楼主| 发表于 2012-2-6 21:28 | 显示全部楼层
爱疯 发表于 2012-2-6 21:04
还是不大理解,只好猜了。

只修改了排序区域

附件.rar (28.03 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2012-2-6 21:30 | 显示全部楼层
happym8888 发表于 2012-2-6 21:13
楼主,你试过这里10楼的代码没有?
http://www.excelpx.com/forum.php?mod=redirect&goto=findpost&ptid ...

老师你好,我试了,可能是我表述的不清楚,我目的是,工作表改变时,不改变代码,也能正确排序。

排序的起始位置由鼠标来选择
回复

使用道具 举报

发表于 2012-2-6 21:35 | 显示全部楼层
你要你工作表改变是按照你附件工作表向下扩展数据我的代码就能够达到目的

但是如果你的工作表大变样,那就不行了,就需要你提供你工作表到底要怎么变化。
回复

使用道具 举报

 楼主| 发表于 2012-2-6 21:39 | 显示全部楼层
sunjing-zxl 发表于 2012-2-6 21:35
你要你工作表改变是按照你附件工作表向下扩展数据我的代码就能够达到目的

但是如果你的工作表大变样,那 ...

感谢老师不厌其烦的帮忙,具体的附件在15楼,请老师看附件,谢谢老师。
回复

使用道具 举报

发表于 2012-2-6 21:41 | 显示全部楼层
早点说出你表格变动状态早解决了,用这个吧
  1. Sub 排序()
  2.     Dim arr1, arr2, arr3
  3.     Dim i As Long, j As Long, k As Long, n As Long, m As Long
  4.     Dim Co As Long
  5.     '设置自定义排序的顺序
  6.     arr1 = Array("外妇科", "手术室", "内儿科", "西医科", "中医科", "耳鼻喉科", "放射科", "检验科", "B超室", "口腔科", "针灸科", "西药房", "中药房", "收费室", "疾控科", "合管办", "后勤科")
  7.     arr2 = Range("A1:N1")
  8.     For i = 1 To UBound(arr2, 2)
  9.         If arr2(1, i) = "科室" Then
  10.             Co = i
  11.             Exit For
  12.         End If
  13.     Next i
  14.     n = ActiveCell.Row    '获取活动单元格行号
  15.     m = [A65536].End(xlUp).Row
  16.     If n = 1 Or n > m Then
  17.         MsgBox "活动行超出范围,不能排序"
  18.         Exit Sub
  19.     End If
  20.     arr2 = Range(Cells(n, 1), Cells(m, "N"))    '活动单元格至最后一行数据赋值给数组arr2
  21.     ReDim arr3(1 To UBound(arr2), 1 To UBound(arr2, 2))
  22.     m = 0    '计数变量
  23.     For i = 0 To UBound(arr1)
  24.         For j = 1 To UBound(arr2)
  25.             If arr1(i) = arr2(j, Co) Then
  26.                 m = m + 1
  27.                 For k = 1 To UBound(arr2, 2)
  28.                     arr3(m, k) = arr2(j, k)
  29.                 Next k
  30.             End If
  31.         Next j
  32.     Next i
  33.     Cells(n, 1).Resize(UBound(arr3), UBound(arr3, 2)) = arr3
  34.     MsgBox "排序完成"
  35. End Sub
复制代码
回复

使用道具 举报

发表于 2012-2-6 21:43 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:06 , Processed in 0.337463 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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