查询包含通配符的表

简洁版本:


基本上我想这样做,但在Excel中。 而不是使用通配符查询表,我想查询包含通配符的表。

长版本:


我正在创build一个电子表格来汇总每个月底我的银行账户交易。 我想把银行对账单上的交易组织成“杂货”,“娱乐”,“燃料”等类别,然后总结每个类别花费的总金额。

我有一个充当数据库的工作表,每个类别都有一个已知的帐户名称列表(例如在“服装”下,我有所有服装店的帐户名称)。 然后我有另外一张表,其中包含交易(帐户名称和金额)的前两列,然后是每个类别的列。 我使用以下公式将第2列中的每个金额复制到正确的类别列中:

=IF(ISNA(MATCH($B2,database!B:B,0)),"",$C2) 

其中B栏是我银行对账单中的“账户名称”列,C栏包含金额。

只要数据库工作表中的数据完全匹配,就可以正常工作。 但很多帐户名称是相似的,例如“7elevenl12345”,“7eleven836549”等。我怎样才能添加string通配符如“7eleven *”到我的数据库?

提前致谢。

您可以使用SEARCHSEARCH B2中的所有列B值,但更好地限制范围,以便使用第2到第100行

=IF(ISNUMBER(LOOKUP(2^15,SEARCH(Database!B$2:B$100,$B2))),$C2,"")

SEARCH自动search其他文本中的值所以不需要通配符[你应该从数据库中删除通配符,只需要“7ELEVEN”等]。 如果一个(或多个)search匹配,那么它将返回一个数字,所以你可以testing它是否有效。

SEARCHfunction不区分大小写,如果您希望匹配区分大小写,请更改为FIND

说明:

当你使用

=SEARCH(Database!B$2:B$100,$B2)

返回一个与数据库大小相同的“数组”!B $ 2:B $ 100。 对于数据库中的每个值!B $ 2:B $ 100,您可以得到一个数字(如果在B2中find该特定值,那么它就是该数值的起始位置),否则您将获得#VALUE! 错误。

然后当你在这个数组中查找一个像“2”那样的“bignum”时,

=LOOKUP(2^15,SEARCH(Database!B$2:B$100,$B2))

返回数组中最后一个数字….或#N / A如果没有匹配,所以使用ISNUMBER标识是否至less有一个匹配。

如果你想看到返回的整个数组

=SEARCH(Database!B$2:B$100,$B2)

然后把它放在一个单元格中,然后select那个单元格,按F2select公式,按F9查看整个数组。

如果你在Database!B$2:B$100有空白Database!B$2:B$100那么这是一个问题,因为任何值(在位置1)总是“find”空白,所以你可以编辑公式,以防止

=IF(ISNUMBER(LOOKUP(2^15,SEARCH(Database!B$2:B$100,$B2)*(Database!B$2:B$100<>""))),$C2,"")

公式的两个版本都可以通过使用COUNT代替LOOKUPISNUMBER来缩短,也就是说,可以使用后一个版本

=IF(COUNT(SEARCH(Database!B$2:B$100,$B2)*(Database!B$2:B$100<>"")),$C2,"")

但是该版本需要“数组input” – 即需要使用组合键CTRL + SHIFT + ENTER确认公式,以便将公式用括号括起来,例如{和}

注意:这里使用的是2 ^ 15,因为它保证是一个比SEARCH函数可以返回的任何数字更大的数字。 2 ^ 15 = 32768,但单元格中的最大字符数less于32767

你会改变你的公式:= IF(ISNA(MATCH($ B2&“*”,database!B:B,0)),“”,$ C2)

我想这是你要找的。