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

使用Evaluate方法筛选数据——基于两个条件

作者头像
fanjy
发布于 2022-11-16 03:48:13
发布于 2022-11-16 03:48:13
1.6K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:VBA,Evaluate方法

在文章:

使用Evaluate方法筛选数据

中,我们讨论了不使用筛选器而筛选数据的方法技巧,它可以替代自动筛选方法。这里我们进一步以示例扩展这个技巧。

本文的重点是基于多个条件筛选数据,并将结果放在一张新的工作表中。为此,我们仍使用Evaluate方法。

我们要做的是测试数据集的第3列中是否有“No”或“Maybe”。如果有,则把所有这些单元格所在的行中的数据复制到Res工作表中。

要筛选的数据集很简单,如下图1所示。

图1

标题从第10行开始,数据集的宽度为4列。首先,我们测试第3列中是否有含有“Yes”的数据。如果没有,则退出该过程。

If Application.CountIf(Sheet1.Columns(Col), "Yes") = 0 Then Exit Sub

接着,我们告诉VBA数据集从哪里(第10行)开始:

With Sheet1.[A10].CurrentRegion

设置变量(ar):

ar = Filter(.Parent.Evaluate("transpose(if((" & .Columns(Col).Address & _

"=""No"")+(" & .Columns(Col).Address & "=""Maybe""),row(1:" & _

.Rows.Count & "),char(2)))"), Chr(2), 0)

上面是代码中最复杂的部分,但知道要改变什么才是最重要的。我们希望评估的列是第3列,该列中包含Yes、No或Maybe。以下变量:

Dim Col As Integer

Col = 3

可以修改Col=?,其中?代表要评估的列。

下一个可以修改的部分是希望数组的大小以及希望在输出中包含哪些列。在下面的示例中,有4列。

ar = Application.Index(.Value, Application.Transpose(ar), [{1,2,3,4}])

上面在数组ar中包括4列。如果想要第1列和第4列,代码如下所示:

ar = Application.Index(.Value, Application.Transpose(ar), [{1,4}])

此时,还需要更改输出数组的大小:

Sheet2.[A2].Resize(UBound(ar, 1), 2).Value = ar

其中,2等于列(1和4)。在本示例的完整版本中,我们将包括所有4列。程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub FilterToNewLoc2Crit()
    Dim ar As Variant
    Dim Col As Integer
    Col = 3
    If Application.CountIf(Sheet1.Columns(Col), "Yes") = 0 Then Exit Sub
    With Sheet1.[A10].CurrentRegion
        ar = Filter(.Parent.Evaluate("transpose(if((" & .Columns(Col).Address & _
        "=""No"")+(" & .Columns(Col).Address & "=""Maybe""),row(1:" & _
        .Rows.Count & "),char(2)))"), Chr(2), 0)
        ar = Application.Index(.Value, Application.Transpose(ar), [{1,2,3,4}])
    End With
    Sheet2.[A2].Resize(UBound(ar, 1), 4).Value = ar
End Sub

注意到,这个Excel VBA宏将输出数据到sheet2(工作表代码名称)。

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Evaluate方法筛选数据
使用Evaluate方法对诸如工作表名称进行检查可以避免使用循环构造。本文将以示例展示它是如何操作的。
fanjy
2022/11/16
8320
使用Evaluate方法筛选数据
使用字典汇总数据(续)
在学习了《使用字典汇总数据》后,让我们再往前一步。假设我们的数据需要在多个列上进行检查。将A列中的数据链接到B列中的数据,以创建唯一标识符,希望基于2列创建汇总,而不只是前一个示例中所示的一个。假设供应商是Bob,Bob订购了Apple和Orange。订单分为6个不同行,但不是Apple就是Orange。
fanjy
2022/11/16
5430
使用字典汇总数据(续)
使用字典汇总数据
以一个简单的数据集为例,通过唯一的标识符对其进行汇总。如果我们有一个水果店,想按售出的商品汇总销售额。如下图1所示。
fanjy
2022/11/16
7630
使用字典汇总数据
创建树状目录结构
我们都知道,使用TreeView控件可以创建树状目录结构,但如何创建,还是有些技巧,这就是本文要介绍的内容。
fanjy
2023/11/22
2660
创建树状目录结构
使用VBA在数组之间转移数据
本文展示如何将数据从一个数组移动到另一个数组,并转移后的数据输入到另一个位置。也就是说,如何使用第二个数组将数据从Excel中移出,并存储到内存中,然后再移回单元格中。
fanjy
2022/11/16
1.2K0
VBA技巧:使用数组复制不同的列
假设我们只想复制工作表中指定列的数据,例如第1、2、5列的数据,有多种实现方法,这里介绍使用数组的VBA代码实现。
fanjy
2022/11/16
2.9K0
示例讲字典(Dictionary):获取唯一值
字典(Dictionary)是一种通过键(key)和项(item)(注:键和项是字典中的术语)存储唯一项的方法。它是一种基于唯一键存储数据的极好工具,它的强大之处在于可以使用键来存储和合并数据。
fanjy
2022/11/16
4.9K0
示例讲字典(Dictionary):获取唯一值
ArrayList等相关代码示例
标签:VBA,ArrayList,Queue,Sortedlist,Stack,Random
fanjy
2023/11/24
2670
ArrayList等相关代码示例
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
领导是要求是:有这样的一个表格,请按“模板”文件,建立面试级别的几个文件,并筛选出相应的内容填写到各工作簿中,
哆哆Excel
2022/10/25
8560
Excel学习----一键创建相应“惟一性”的文件,再筛选数据并写入相应的文件中
VBA:正则表达式(3) -特殊公式修改
示例:数据保存在B列,其格式为规格1*数量1 + 规格2*数量2 + ...。现在需要统计数量总和,如C列所示。例如,单元格B3中,包装明细为100*3+115*1,对应的包装个数就是3+1。
Exploring
2023/09/20
3840
VBA:正则表达式(3) -特殊公式修改
Excel应用实践25: 找出两个单元格区域中不相同的数据
有两组数据,一组是原来工作表中存储的,一组是从办公系统中下载的,这两组数据应该完全一样,但实际发现存在几个不相同的数据,现在想要找出这些不相同的数据,可是数据有上千条,一个个对照的话,速度慢不说,还不容易找全。
fanjy
2020/01/14
1.7K0
Excel应用实践25: 找出两个单元格区域中不相同的数据
Excel应用实践11:合并多个工作簿中的数据——示例2
在上一篇文章《Excel应用实践10:合并多个工作簿中的数据》中,我们使用代码快速合并超过50个Excel工作簿文件,然而,如果要合并的工作簿中工作表的名称不相同,但位于每个工作簿的第1个工作表;并且,要在合并后的工作表的第1列中输入相对应的工作簿文件名,以便知道合并后的数据来自哪个工作簿文件。
fanjy
2019/07/19
2.8K0
VBA数组用法案例详解
VBA数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。另外,数组在赋值计算效率上面也是非常高的,大家可以自行尝试下。
大师级码师
2022/11/06
2.1K0
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2K0
VBA高级筛选应用:拆分或更新子工作表
下图1所示是一个简单的示例数据集。这里已经突出标示了Dept A(橙色),因为这是我们可能希望为这个部门创建新工作表,然而,如果已经有一个标题为“A”的工作表,那么就不会创建新工作表,只会将数据添加到现有工作表中。其中心思想是创建一个唯一的工作表,其中包含与部门相关的数据。因此,这里会为A、B和C分别创建一个工作表。如果添加了任何新的部门,则也为这些部门创建新的工作表。
fanjy
2022/11/16
1.6K0
VBA高级筛选应用:拆分或更新子工作表
VBA示例:查找并分别列出找到的所有值
如下图1所示,有一系列数据,其中Yl代表“Yellow”,Re代表“Red”,Bl代表“Blue”,Gr代表“Green”。
fanjy
2024/06/04
3330
VBA示例:查找并分别列出找到的所有值
使用VBA创建相关联的数据有效性列表
如下图1所示,当选择工作表Sheet2列A中的单元格下拉列表项后,其相邻列B中的单元格下拉列表项会与列A中选择项相关联,也就是说,列A中选择不同的项,列B中也会呈现相应的项。
fanjy
2024/06/18
2100
使用VBA创建相关联的数据有效性列表
ExcelVBA字典用法之按列拆分工作表
Set dic= CreateObject("Scripting.Dictionary")
哆哆Excel
2022/10/25
1.2K0
ExcelVBA字典用法之按列拆分工作表
各项工具大pk,分组聚合哪家强?
今天我将带大家分别使用MySQL、Excel、Pandas、VBA和Python来实现这个需求。
朱小五
2021/01/20
7260
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46K0
Excel VBA编程
相关推荐
使用Evaluate方法筛选数据
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验