Excel精英培训网

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

[已解决]求助一个有关筛选的代码.

[复制链接]
发表于 2012-1-29 20:59 | 显示全部楼层 |阅读模式
请教一个小白问题:
   ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:="10"
上面这条是对数值10进行筛选,假如要每次步进1进行筛选,11,12,13,14,15...这样直到99.
要是每筛选一个数都写一条,那工程量也太大了吧.有没有能够简化些的代码呢?多谢了!



最佳答案
2012-1-30 08:52
for i=0 to 99
if i<10 then
s="0" & i  's定义成文本类型(如果是000-999就判断小于10加2个0,小于100加一个0
else
s="" & i
end if
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=s
next i
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-1-29 21:20 | 显示全部楼层
for i=10 to 99
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=i
next i

没有附件,我没办法测试,而且你也没有说筛选出来的数据如何处理。所以处理数据的代码也没法写。
回复

使用道具 举报

发表于 2012-1-29 21:28 | 显示全部楼层
本帖最后由 windimi007 于 2012-1-29 21:29 编辑

定义一个公共变量吧!{:3912:}
  1. Dim i As Byte
  2. Sub sx()
  3.     If i = 0 Then
  4.         i = 9
  5.     ElseIf i = 99 Then
  6.         i = 10
  7.     End If
  8.     i = i + 1
  9.     ActiveSheet.AutoFilterMode = False
  10.     ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, criterial:=i
  11. End Sub
复制代码

如果需要还原,可以用代码将i的值转换为0,如下面的代码:
  1. Sub hy()
  2.     i = 0
  3. End Sub
复制代码

回复

使用道具 举报

 楼主| 发表于 2012-1-29 21:37 | 显示全部楼层
sunjing-zxl 发表于 2012-1-29 21:20
for i=10 to 99
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=i
next i

这样就可以了,因为就这一个小疑问所以也没上附件.多谢你了.
附带问一下:如果是类似00,01,001这样的数值在for i=中是不能识别的是吧?
我试了试,输入01,001.....都变为1.
回复

使用道具 举报

 楼主| 发表于 2012-1-29 21:41 | 显示全部楼层
windimi007 发表于 2012-1-29 21:28
定义一个公共变量吧!

如果需要还原,可以用代码将i的值转换为0,如下面的代码:

谢谢,假如是00,01,02...这样的数值呢?我试了试 i 后都成了0,1,2...这样,前面的0被忽略了.
回复

使用道具 举报

发表于 2012-1-29 22:00 | 显示全部楼层
需要说清楚你的变化规律。
01,001到底怎么变化
你的问题只涉及了11到99变化
但是你的01到001是怎么变化?
是01-99-001-999吗?
还是其他什么变化
要添加位数,就用
s="0" & i-------------(需要判断i值需要加多少0)
回复

使用道具 举报

 楼主| 发表于 2012-1-29 22:18 | 显示全部楼层
sunjing-zxl 发表于 2012-1-29 22:00
需要说清楚你的变化规律。
01,001到底怎么变化
你的问题只涉及了11到99变化

对,就是00-99或000-999这样步进.
假如筛选值为000-999,应该怎么改一下?再帮一下这个问题就可以解决了,多谢老师了.

for i=10 to 99
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=i
next i

回复

使用道具 举报

 楼主| 发表于 2012-1-29 22:23 | 显示全部楼层
唉,都怪我开始打错了字,00打成了10.否则也不用费这些周折了.
回复

使用道具 举报

发表于 2012-1-30 08:52 | 显示全部楼层    本楼为最佳答案   
for i=0 to 99
if i<10 then
s="0" & i  's定义成文本类型(如果是000-999就判断小于10加2个0,小于100加一个0
else
s="" & i
end if
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=s
next i
回复

使用道具 举报

发表于 2012-1-30 09:19 | 显示全部楼层
不要if,直接
ActiveSheet.Range("$A$1:$F$1536").AutoFilter Field:=6, Criteria1:=right(string(n,"0") & i,n)
要00-99n就写成2,要 000-999n就写成3,要0000-9999n就写成4……
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 02:03 , Processed in 0.298390 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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