我正在尝试编写一个 Excel 公式,该公式允许我过滤文档中所有列和工作表的搜索结果。
例如,假设我的 Excel 文件有两张表(Sheet1 和 Sheet2),其中包含以下数据:
表1:
A B C
Col1 Col2 Col3
foo 1 NA
bar 2 y
baz 3 bar
foo 4 z
bar 5 NA
baz 6 foo
表2:
A B C
Col1 Col2 Col3
foo 7 bar
bar 8 bar
baz 9 bar
foo 10 z
bar 11 y
baz 12 NA
我可以写出公式:
=FILTER('Sheet1'!A:C;ISNUMBER(SEARCH("foo";'Sheet1'!A)))
将返回:
foo 1 NA
foo 4 z
但是,我找不到一种方法来过滤结果并考虑所有列和工作表:
foo 1 NA
foo 4 z
baz 6 foo
foo 7 bar
foo 10 z
您肯定需要
VSTACK()
和 MMULT()
来完成所需的输出:
=LET(
_DataFromBothSheets, VSTACK(Sheet1:Sheet2!A2:C7),
_Include, MMULT(1-ISERR(SEARCH("foo",_DataFromBothSheets)),{1;1;1}),
FILTER(_DataFromBothSheets,_Include,""))
LET()
函数有助于定义变量并更易于阅读。VSTACK()
函数,我们将两张表中的数据附加到一张表中。ISNUMBER()
或 1-ISERR()
执行相同操作,可返回 TRUE
表示匹配值,并返回 FALSE
表示错误值,因为 SEARCH()
函数会返回文本开头的位置。MMULT()
返回两个数组的矩阵乘积,其中一个使用上面的方法返回,并且 {1;1;1}
FILTER()
函数的 include参数,放置后会给出所需的输出。