前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Evaluate方法筛选数据

使用Evaluate方法筛选数据

作者头像
fanjy
发布2022-11-16 11:39:25
7820
发布2022-11-16 11:39:25
举报
文章被收录于专栏:完美Excel

标签:VBA,Evaluate

使用Evaluate方法对诸如工作表名称进行检查可以避免使用循环构造。本文将以示例展示它是如何操作的。

在一些网站上,讨论过很多关于在代码中使用自动筛选来避免循环的话题。这很有意义,因为筛选可以在一个操作中完成在多个操作中循环可以完成的事情。一般来说,它比循环快得多,并且使用更少的VBA编码。

下面是尝试使用Evaluate方法进行循环的新方法。

示例要求将列D显示“Yes”的所有数据从sheet1提取到sheet2。

图1:sheet1

图2:sheet2

代码如下:

代码语言:javascript
复制
Sub FilterToNewLocation()
    Dim ar As Variant
    If Application.CountIf(Sheet1.Columns(4), "Yes") = 0 Then Exit Sub
    With Sheet1.[a1].CurrentRegion
        ar = Filter(.Parent.Evaluate("transpose(if(" & .Columns(4).Address & _
        "=""Yes"",row(1:" & .Rows.Count & "),char(2)))"), Chr(2), 0)
    ar = Application.Index(.Value, Application.Transpose(ar), [{1,2,3,4}])
    End With
    Sheet2.[A11].Resize(UBound(ar, 1), 4).Value = ar
End Sub

要重复利用该过程,将Columns(4)中修改为判断条件所在的列。

选择要返回的列号,并将其放在花括号中,本示例中是{1,2,3,4}。

确保从工作表1(Sheet1)到工作表2(Sheet2)的工作表引用(工作表代码名称)与数据集一致。

注:本文学习整理自thesmallman.com,有兴趣的朋友可以到下载示例工作簿,或者到知识星球App完美Excel社群下载示例工作簿。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档