对于绝大多数 Excel 用户来说,当“数据过滤”这个词出现在他们的脑海中时,只有选项卡中常用的经典过滤器 数据 - 过滤器 (数据 - 过滤器):
毫无疑问,这样的过滤器是很熟悉的东西,而且在大多数情况下都可以。 但是,在某些情况下,您需要一次按多个列中的大量复杂条件进行过滤。 这里通常的过滤器不是很方便,我想要更强大的东西。 这样的工具可能是 先进的过滤器,尤其是“用文件完成”(根据传统)。
基地
首先,在您的数据表上方插入几行空行并复制表头 - 这将是一个带有条件的范围(为清楚起见以黄色突出显示):
黄色单元格和原始表格之间必须至少有一个空行。
您需要在黄色单元格中输入条件(条件),然后根据这些条件执行过滤。 例如,如果您需要在第三季度的莫斯科“欧尚”中选择香蕉,那么条件将如下所示:
要进行筛选,请选择包含源数据的区域中的任何单元格,打开选项卡 时间 然后点击 另外 (数据——高级). 在打开的窗口中,应该已经自动输入了一个包含数据的范围,我们只需要指定条件范围,即 A1:I2:
请注意,条件范围不能“有边距”分配,即不能选择多余的空黄线,因为条件范围内的空单元格被 Excel 认为没有条件,而整个空单元格行作为不加选择地显示所有数据的请求。
Switch 开关 将结果复制到另一个位置 将允许您在此工作表上过滤列表(与常规过滤器一样),但将所选行卸载到另一个范围,然后需要在字段中指定 将结果放在范围内. 在这种情况下,我们不使用这个函数,我们离开 过滤列表到位 并点击 OK. 选定的行将显示在工作表上:
添加宏
“嗯,这里哪里方便?” 你问,你会是对的。 您不仅需要用手在黄色单元格中输入条件,还需要打开一个对话框,在此处输入范围,按 OK. 伤心,我同意! 但是“一切都来了©”——宏!
使用一个简单的宏可以大大加快和简化高级过滤器的工作,该宏会在输入条件时自动运行高级过滤器,即更改任何黄色单元格。 右键单击当前工作表的选项卡并选择命令 来源文字 (源代码). 在打开的窗口中,复制并粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:I5")) Is Nothing Then On Error Resume Next ActiveSheet.ShowAllData Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange :=Range("A1").CurrentRegion End If End Sub
当当前工作表上的任何单元格发生更改时,此过程将自动运行。 如果更改单元格的地址落入黄色范围 (A2:I5),则此宏将删除所有过滤器(如果有)并将扩展过滤器重新应用到以 A7 开头的源数据表,即立即过滤所有内容进入下一个条件后:
所以一切都好多了,对吧? 🙂
实现复杂的查询
现在所有内容都在动态过滤,我们可以更深入地研究细微差别并分解高级过滤器中更复杂查询的机制。 除了输入完全匹配之外,您还可以在一系列条件中使用各种通配符(* 和 ?)和数学不等号来实现近似搜索。 字符大小写无关紧要。 为清楚起见,我在表格中总结了所有可能的选项:
标准 | 结果 |
gr* 或 gr | 所有单元格以 GrIe Gr耳朵, Gr柚子, GrANAT 等等 |
= 洋葱 | 所有单元格都准确且仅带有单词 弓,即完全匹配 |
*liv* 或 *liv | 细胞含有 丽芙 如何下划线,即 О丽芙这, 丽芙ep, 根据丽芙 等等 |
=p*v | 开头的词 П 并以 В ie П第一в, П醚в 等等 |
作为 | 开头的词 А 并进一步包含 СIe А贝尔сin, А娜娜с, Asai 等等 |
=*s | 以结尾的词 С |
=???? | 所有包含 4 个字符(字母或数字,包括空格)的文本的单元格 |
=m??????n | 以 8 个字符开头的所有单元格 М 并以 НIe М安达里н, М焦虑н 等等 |
=*n??a | 所有以结尾的词 А, 从末尾算起的第 4 个字母在哪里 НIe 光束нikа, 根据нozа 等等 |
>=e | 所有以开头的单词 Э, Ю or Я |
<>*哦* | 所有不包含字母的单词 О |
<>*维奇 | 除了结尾的所有单词 艾滋病毒 (例如,按中间名过滤女性) |
= | 所有空单元格 |
<> | 所有非空单元格 |
> = 5000 | 值大于或等于 5000 的所有单元格 |
5 或 =5 | 所有值为 5 的单元格 |
> = 3/18/2013 | 日期在 18 年 2013 月 XNUMX 日(含)之后的所有单元格 |
细微之处:
- * 符号表示任意数量的任意字符,而 ? – 任何一个字符。
- 处理文本和数字查询的逻辑略有不同。 因此,例如,编号为 5 的条件单元格并不意味着搜索所有以 XNUMX 开头的数字,但带有字母 B 的条件单元格等于 B*,即将查找以字母 B 开头的任何文本。
- 如果文本查询不以 = 符号开头,那么您可以在脑海中将 * 放在末尾。
- 日期必须以美国格式月-日-年并通过分数输入(即使您有 Excel 和区域设置)。
逻辑连接 AND-OR
写在不同单元格但在同一行中的条件被认为是由逻辑运算符互连 И (和):
那些。 在第三季度为我过滤香蕉,正是在莫斯科,同时来自欧尚。
如果您需要将条件与逻辑运算符联系起来 OR (要么),那么它们只需要在不同的行中输入。 例如,如果我们需要查找经理 Volina 的莫斯科桃子的所有订单和萨马拉第三季度的所有洋葱订单,那么可以在一系列条件中指定如下:
如果您需要对一列施加两个或多个条件,那么您只需在条件范围内复制列标题并在其下输入第二个、第三个等。 条款。 因此,例如,您可以选择从 XNUMX 月到 XNUMX 月的所有交易:
一般来说,在“完成一个文件”之后,一个高级过滤器就会成为一个相当不错的工具,在某些地方并不比经典的自动过滤器差。
- 宏上的超级过滤器
- 什么是宏,在 Visual Basic 中插入宏代码的位置和方法
- Microsoft Excel 中的智能表格