ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5950|回复: 12

[分享] 【自动筛选】--神器般的存在

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-2-25 17:33 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:XLA加载宏开发
本帖最后由 huanglicheng 于 2014-2-25 22:07 编辑

自动筛选:让Excel筛选变得如此的简单。只需Alt+Q,。
快捷键Alt+Q
功能介绍:
1、快速筛选与选定单元格内容相同的单元格。
2、支持选择多个单元格。
操作方法:
1、选定单元格,按快捷键Alt+Q即可筛选,
2、再次按Alt+Q可以取消筛选
一个用了会上瘾的功能 。TA正在用着。你呢?
自动筛选2.0.zip (677.11 KB, 下载次数: 794)


TA的精华主题

TA的得分主题

发表于 2014-2-25 19:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
阁下上次好像有分享过,版本更新了?

TA的精华主题

TA的得分主题

发表于 2014-2-25 20:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-2-25 20:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-25 21:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
张雄友 发表于 2014-2-25 19:12
阁下上次好像有分享过,版本更新了?

嗯嗯是的,更新一次版本。只为分享给更多的人 @_@

TA的精华主题

TA的得分主题

发表于 2014-2-25 22:22 | 显示全部楼层

  1. Private Sub auto_open()
  2.    
  3.     With Application.CommandBars("Formatting").Controls.Add(Type:=msoControlButton, temporary:=True)
  4.         .Caption = "自动筛选(&Q)"
  5.         .OnAction = "自动筛选"
  6.         .FaceId = 497
  7.         .TooltipText = "自动筛选当前列与当前单元格相同的内容"
  8.         .Style = msoButtonIconAndCaption
  9.     End With
  10.     Application.OnKey "%{q}", "自动筛选"
  11. End Sub
  12. Private Sub auto_close()
  13.     On Error Resume Next
  14.     Application.CommandBars("Formatting").Controls("自动筛选(&Q)").Delete
  15. End Sub
  16. Sub 自动筛选()
  17.     arr = Range(ActiveSheet.Range("a1"), ActiveSheet.Cells.SpecialCells(xlLastCell))  '把表中数据赋值给数值
  18.     If IsArray(arr) = False Then MsgBox "当前表格中没有数据,或只有一个数据": Exit Sub
  19.     If UBound(arr, 1) = 1 Then MsgBox "当前表格中只有一行数据不需要筛选": Exit Sub
  20.     If ActiveSheet.FilterMode = True Then Call 取消筛选 Else: Call 执行筛选    '根据当前筛选状态执行对应命令'
  21. End Sub
  22. Sub 取消筛选()
  23.     Dim myrng$    '单元格地址
  24.     myrng = Selection.Address    '获取当前选定的地址
  25.     Cells.AutoFilter    '取消筛选'
  26.     Range(myrng).Select    '选择原先的单元格'
  27.     Application.StatusBar = False    '恢复状态栏的显示'
  28. End Sub
  29. Sub 执行筛选()
  30.     On Error GoTo line
  31.     Dim ic%, rng As Range, myrng$   '列号,单元格'
  32.     Dim kg As Boolean
  33.     Application.ScreenUpdating = False    '关闭屏闭
  34.     If Application.Version <> "11.0" Then
  35.         Call 多值筛选
  36.     Else
  37.         If Selection.Rows.Count = 1 Then    ''如果选定的单元格的行数等于1
  38.             If Range("A1") = "" Then Range("a1") = " ": kg = True
  39.             For Each rng In Selection    '在选定范围中循环'
  40.                 ic = rng.Column    '获取列号'
  41.                 myrng = rng.Value
  42.                 If IsDate(myrng) = True Then myrng = Application.WorksheetFunction.Text(myrng, rng.NumberFormat)                     '单元格值赋给myrng'
  43.                 Cells.AutoFilter ic, myrng    '在对应列号中筛选等于对应的单元格的值'
  44.             Next
  45.             '--------------------------------------------------
  46.             If kg = True Then Range("a1") = ""
  47.             ActiveWindow.ScrollRow = 1    '窗口跳转到第1行
  48.             If ActiveSheet.FilterMode Then
  49.                 With ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
  50.                     Application.StatusBar = "筛选结果为" & .Count / .Columns.Count - 1 & "个记录 【如需更多其他方便功能 请联系QQ379069784】"
  51.                 End With
  52.             End If
  53.         Else
  54.             MsgBox "2003版的不支持多行数据筛选,只支持单行数据筛选", 48, "SoSo提示您"
  55.         End If
  56.     End If
  57.     Application.ScreenUpdating = True
  58. line:
  59. End Sub
  60. Sub 多值筛选()
  61.     On Error GoTo line
  62.     Dim i%, j%, arr, x1$
  63.     Dim ic%, ir%, q%, xx
  64.     Dim d As Object, dic As Object
  65.     Set d = CreateObject("scripting.dictionary")
  66.     Set dic = CreateObject("scripting.dictionary")
  67.     '--------------------------------------------------
  68.     For Each rng In Selection    '在选定范围中循环'
  69.         With rng
  70.             ic = .Column    '获取列号'
  71.             If IsDate(.Value) = True Then
  72.                 x1 = Application.WorksheetFunction.Text(.Value, rng.NumberFormat)
  73.             Else
  74.                 x1 = .Value
  75.             End If
  76.             '--------------------------------------------------
  77.             If x1 = "" Then x1 = "="
  78.             If dic.exists(ic) = True Then
  79.                 dic(ic) = dic(ic) & "|" & x1
  80.             Else
  81.                 dic(ic) = x1
  82.             End If
  83.         End With
  84.         '--------------------------------------------------
  85.         Cells.AutoFilter Field:=ic, Criteria1:=Split(dic(ic), "|"), Operator:=xlFilterValues
  86.     Next
  87. line:
  88. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-2-26 08:05 | 显示全部楼层
源码在楼上小伙伴这,有需要的朋友可以参考一下。^_^

TA的精华主题

TA的得分主题

发表于 2014-2-26 13:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,不错!

TA的精华主题

TA的得分主题

发表于 2014-2-26 21:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-7 15:03 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 20:34 , Processed in 0.050363 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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