Excel VBA之函数篇-3.16多样筛选组合任君选 筛选功能从此是路人前景提要
hi,我回来了,经过了昨日晚上一夜的奔波之后,终于成功的在凌晨杀回了自己的床上,你要问我路况如何,我只能告诉你,大晚上也不轻松啊,好在能够顺利到达,哈哈
昨天我们分享了如何通过like()函数来实现数据的筛选,可能是因为昨天忙于赶车,比较着急,我看了下我好像并没有介绍完一些比较常用的功能,今天就继续来分享下like()函数再筛选方面的强大功能吧。函数说明
like()函数的筛选是非常强大的,昨天和今天的案例中的那些筛选特点,是我综合自己日常工作中和平时帮其他同事写一些小代码的时候,总结出来的,可能并不完善,但是基本上应该够用了,当大家知道了like()函数的这些强大的功能之后,可能在之后的工作中, 会慢慢的抛弃excel自身的筛选功能,因为很多我们需要的筛选功能,它都没有办法实现。上代码
我们还是采用上节我们的案例,当然为了演示的效果,自然还是会不断的更改一些数据
今天我们依然来完成三个比较奇怪的要求
1.E-G开头,m-x结尾的数量Sub B9000b()
Dim i&
For i = 2 To 16
If Cells(i, "d") Like "[E-G]*[m-x]" Then
Cells(i, "d").Interior.Color = vbYellow
End If
Next i
End Sub
效果图如上,注意我圈中的那两个了嘛?看起来非常的相似,并且好像也符合我们的要求,但是为什么上面的被选中了,但是下面的却没有被选中呢?认真学习我们分享的童鞋一定知道,如果不知道的话,出门右拐,看看上一节3.15的分享吧
2.第5位是字母的数量
这个要求似乎和上节的最后一个要求有点类似哦,不同的是,上节的是要求要有从第二位开始往后都是数字,但是这里仅仅是要求第5为是数字,那么如何写呢?
我们讲过“*”代表的是占位符,霸占位置的意思,而#也是占位符,同时他也代表数字,难道正确的答案应该是“****#*”我们来试下Sub B9000b()
Dim i&
For i = 2 To 17
If Cells(i, "d") Like "****#*" Then
Cells(i, "d").Interior.Color = vbYellow
End If
Next i
End Sub
看看结果变成什么样子了
这个结果似乎有点出乎我们的意料之外,我们仅仅是想要得到第5位是数字的订单号,但是我们来看看结果,全部都选中了,只有一个没有数字的纯英文的订单号没有被选中,而选中的结果中,有些完全不符合我们的要求,比方说test上面2个,G200Ax,第5位并不是数字,而实一个问好,这很明显不符合我们的要求,证明我们的写法存在错误,为什么会这样呢?
这里要解释下,"*"他虽然是霸位的那个,你可以理解不管他是霸占一个位置也好,霸占5个位置也好,他都叫霸占,俺么再程序上可能就理解,他至少霸占了一个,那么看看我们的数据,至少霸占了一个,那就是第一位,从第一位开始,第二位是数字的有哪些?是不是剩下的都是属于这种情况呢?所以结果才会出现这样打的偏差,那么我们要怎么处理呢?
今天在分享一个新的知识点,那就是另外一个特殊符号"?",他也算是占位符,但是他就属于比较老实一点的那种霸位的人,他一次只霸占一个位置,那么就是说一个"?"就代表了一个位置的意思了,那么既然第5位是数据,那么我只需要填上4个?+一个#,也就是这样的格式"????#*?",我们再代码中验证下Sub B9000b()
Dim i&
For i = 2 To 17
If Cells(i, "d") Like "????#*?" Then
Cells(i, "d").Interior.Color = vbYellow
End If
Next i
End Sub
虽然结果还是很多,但是你看看是不是都符合要求了,第5位数都是数字,不是数字的,都没有被选中,是不是很完美呢?
3.包含?号的数量和
既然我们前面讲到了"?"的用法,那么不可避免的就会牵扯到一个问题,如果我们要筛选的数据,刚好里面就有?,而且?又正好是我们的参考标注呢,你不要说不可能,我换个场景,假设你再处理从网络中爬取的数据的时候,有些字符因为编码的问题,你爬出来的数据可能含有各种乱七八糟的符号,其中就有可能有?,某一些英文都转化成为了?,那么你要怎么办呢?Sub B9000b()
Dim i&
For i = 2 To 19
If Cells(i, "d") Like "*[?]*" Then
Cells(i, "d").Interior.Color = vbYellow
End If
Next i
End Sub
成功的将含有?的数据找了出来,你会看到含有*。#的数据,那么这些要如何实现呢,当成一个小练习,大家模拟着上面的代码就可以实现了。
总结
==========================================================================
OK ,今天的分享就到这里了,按照计划关于like()的分享,截止到本篇就结束了,章节也是比较的多,因为like()的应用场景延伸出来还是非常的广泛的,在一些日常工作中,小编经常用来进行复杂的数据筛选和数据是否包含于某种类型的情况下使用,大家也可以结合自己的实际场景使用需求来灵活运用。
==========================================================================
本人已经打算长期分享一些网络搜集的各种VBA知识,如果大家有问题也可以提出来共同解决,一起进步,毕竟VBA的世界还是很大的。
如果你有什么想要分享的,或者有什么想要知道的,都可以留言等方式告诉我,大家一起努力进步。
好了,明晚19:00,准时再见。
=============================历史相关文章==============================