最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 6576|回复: 13

[VBA/VBS教程] 为ET补上筛选唯一值功能

[复制链接]

84

主题

59

听众

3088

积分

测试体验团员

系统分析师

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
984
威望
8204
帖子
842
精华
3

WPS粉丝团 技术分享团 解答支持团 测试体验团 重阳节勋章 技巧教程分享达人 最佳教程奖 优秀会员奖

发表于 2012-11-11 01:50 |显示全部楼层
分享到: 新浪微博 腾讯微博
筛选功能是电子表格软件很重要的一块内容,无论是ET还是Excel,都具有强大的筛选功能,但比较遗憾的是,ET和Excel都没有“筛选唯一值”功能。
7 m6 h6 W  f, p8 T为此,我们利用VBA来模拟这一功能。
% ^* v# e% X! w+ b" g" X这里之所以说是模拟而不是实现,是因为,VBA是无法操作ET或Excel的筛选器的,所以我们只好退而求其次,用隐藏行的方法来模拟“筛选唯一值”。
* ?& R; r. c/ @1 l: {8 T这里给出VBA代码(最多可以处理32767行数据):
6 o1 m; ?2 c. n(这里给的是核心代码,不包括下图中创建按钮的代码)
  1. Public Sub 筛选唯一值() '最多可以处理32767行数据
    4 j3 [2 o3 G7 v; X& c+ L
  2. Application.ScreenUpdating = False '关闭屏幕更新,加快速度  y# o/ R/ ~- [$ ~$ x
  3. Dim cell As Range, i As Long, rng As Range, only As New Collection
    . X9 ~0 w( c* w
  4. If TypeName(Selection) <> "Range" Then Exit Sub ' 选择对象不是单元格则退出
    / |5 X2 {0 s4 S4 E& Y
  5. If Selection.Columns.Count > 1 Then
    2 J  R5 r8 y9 g  k2 N
  6. MsgBox "只能选择一列数据!", 0 + 64, "天远筛选唯一值"2 q5 a4 x2 S0 d
  7. Exit Sub
    + D- ?2 S5 N  I5 u
  8. End If
    8 z9 K% q9 b& n# A
  9. Set rng = Intersect(ActiveSheet.UsedRange, Selection)
    1 u# u% o) O. U
  10. On Error Resume Next
    - [4 T' b: v1 i9 z; C
  11. For j = 1 To rng.Count '遍历选区所有单元格
    * |; N* |4 X/ I7 v+ a/ d- \
  12. If rng(j) <> "" Then9 ?8 P. ?# o0 x( r* I( s
  13. only.Add rng(j).Value, CStr(rng(j).Value) '逐个导入 Collection对象
    # w$ h! D9 W- t$ \* I
  14. End If
    ! ~, U9 f/ K( _2 k# y! d
  15. If Err <> 0 Then '如果有错误(重复)
    0 t) H& Y; Z. v$ U* m
  16. i = i + 1 '累加变量8 H/ _% l) A4 C: J& v$ B
  17. '如果变量i为1则将 Selection(j)赋值给rng,否则将rng与 Selection(j)合并为一个Range对象
    ) y1 ?- \6 U" m. e
  18. If i = 1 Then
    4 m* u4 E9 K* X, }
  19. Set cell = Selection(j)  k+ q+ |7 r, I2 _# B* w( B
  20. Else7 S# i+ Y' w+ {; I) m6 m
  21. Set cell = Union(cell, rng(j))- i4 ^2 l3 C0 Q/ l# A% S+ q
  22. End If
    : E' v1 s5 {4 d2 }8 j& Y% R
  23. Err.Clear '清除错误8 ~, C6 M/ l) A7 y: k, m8 [
  24. End If& W" H% D1 e" W# S2 v) |1 c
  25. Next j# j' K" h( t' M- v, a: e2 L
  26. cell.EntireRow.Hidden = True '隐藏所有符合条件的行
    5 Y1 I/ Y4 X8 A3 z
  27. Application.ScreenUpdating = True, H, B7 E% }+ ^. K6 g
  28. End Sub
复制代码
示例图如下:! \3 Z* G* Z4 b" E8 b! k

, X& k% F5 D  e8 m5 r" ?! |& V6 x3 K
  X0 H2 M6 G# _* p, W. x
3 U8 E( g9 u; y1 m5 G7 l0 f' f# _* e& {6 w

) t& f2 t! R2 e+ a* h3 J
* {; U; p, f2 h. I  t最后附上示例文档,里面包含了所有代码,包括创建按钮的代码。% |+ t5 J* k. @! J7 b; ~3 u! [
使用本文档需要您的WPS拥有VBA环境,没有VBA环境的请到http://bbs.wps.cn/thread-22347925-1-1.html中下载安装。
6 m+ V: u4 a$ N- t- c0 U3 L4 }. k

本帖子中包含更多资源

您需要 登录 才可以下载或查看,

已有 2 人评分威望 收起 理由
松风水月 + 15
zhouyiran1@126.com + 30 很给力!

总评分: 威望 + 45   查看全部评分

热爱分享和学习。希望WPS论坛越办越好,WPS软件越做越好。也希望能在这里交到更多志同道合的朋友。我的邮箱:ypr@yprnet.com
我在WPS论坛上的教程帖子合集: http://blog.yprnet.com/wps

153

主题

109

听众

1万

积分

解答支持团长

老菜鸟

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 240 天

[LV.8]以坛为家I

金币
1254
威望
25965
帖子
10314
精华
1

活跃会员奖 解答支持团 测试体验团 乐于助人奖 优秀会员奖

发表于 2012-11-11 14:04 |显示全部楼层
好东西,学习并收藏啦!
回复

使用道具 举报

19

主题

108

听众

5338

积分

技术分享团长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 5 天

[LV.2]偶尔看看I

金币
5316
威望
11825
帖子
2334
精华
1

WPS粉丝团 荣誉版主奖 活跃会员奖 技术分享团 解答支持团 重阳节勋章

发表于 2012-11-14 04:49 |显示全部楼层
在需要快速预览某一列的数据一共有多少种的时候,这是一个很有用的功能。
" z3 F! J7 C, a% }, l! Q, m2 K0 \' G5 h) w- S1 F
以1楼的第一个图中的A列“ID”为例,如果我想看这一列共有哪些不重复的ID,在通常情况下我需要先对这一列进行排序,然后再对这一列进行分类汇总,才能看到。当然我们也可以用自动筛选的办法,先对数据区域进行自动筛选,然后点击标题行中A1单元格上的下拉箭头来查看。但是第一种办法比较麻烦,第二次办法只能预览数据,不方便进行下一步操作。现在有了天远的这个脚本,就可以很方便地实现这个需求了。感谢天远!{:soso_e179:}
回复

使用道具 举报

0

主题

0

听众

16

积分

LV.1

Rank: 1

该用户从未签到

金币
2
威望
11
帖子
0
精华
0
发表于 2013-12-4 14:34 |显示全部楼层
这个有意义吗?
回复

使用道具 举报

0

主题

0

听众

3

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
4
帖子
3
精华
0
发表于 2014-1-14 23:20 |显示全部楼层
; l# Y3 |# {3 F. e/ w" k
感谢分享,支持楼主
回复

使用道具 举报

0

主题

0

听众

26

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
50
帖子
16
精华
0
发表于 2014-6-2 15:14 |显示全部楼层
3 C# l4 H$ p6 i) R; C' e
好帖子,来支持了!
回复

使用道具 举报

1

主题

0

听众

11

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
15
帖子
9
精华
0
发表于 2014-8-11 22:33 |显示全部楼层
很好很强大
回复

使用道具 举报

0

主题

0

听众

298

积分

LV.4

Rank: 4

该用户从未签到

金币
0
威望
301
帖子
377
精华
0
发表于 2014-9-30 16:19 |显示全部楼层
. f3 e. e. s% u7 \) ~
签与不签,我还是会签到
回复

使用道具 举报

51

主题

3

听众

6366

积分

LV.13

Rank: 13Rank: 13Rank: 13Rank: 13

签到天数: 744 天

[LV.9]以坛为家II

金币
1196
威望
17276
帖子
1867
精华
0
发表于 2016-1-3 09:57 |显示全部楼层

( S/ @. {8 {7 p9 h- a( g0 i我是来消灭0回复的
. T4 j8 p5 Y& [, f
回复

使用道具 举报

5

主题

0

听众

514

积分

LV.5

Rank: 5Rank: 5

签到天数: 52 天

[LV.5]常住居民I

金币
52
威望
1132
帖子
303
精华
0
发表于 2016-1-10 16:58 |显示全部楼层

4 O/ A* E1 R3 j. L, R感谢分享,支持楼主
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛     

GMT+8, 2017-11-25 09:52

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部