使用Evaluate方法筛选数据

2022-11-16 11:39:25 浏览数 (1)

标签: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社群下载示例工作簿。

vba

0 人点赞