查询包含通配符的表

时间:2013-08-07 20:25:46

标签: excel excel-formula excel-2010

简短版:


基本上我想做this,但是在excel中。我想查询一个CONTAINS通配符的表,而不是查询使用通配符的表。

长版:


我正在创建一个电子表格,以便在每个月末汇总我的银行帐户交易。我想将银行对帐单中的交易组织成“杂货”,“娱乐”,“燃料”等类别,然后总结每个类别的总金额。

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

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

如果B列是我的银行对帐单中的“帐户名称”列,则C列包含金额。

只要数据库工作表中的数据完全匹配,这就可以正常工作。但是很多帐户名称都是相似的,例如“7elevenl12345”,“7eleven836549”等。如何在我的数据库中添加带有“7eleven *”等通配符的字符串?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以将公式更改为:= IF(ISNA(MATCH($ B2&“*”,数据库!B:B,0)),“”,$ C2)

我认为这就是你要找的东西。

答案 1 :(得分:1)

您可以对B2中的所有B列值使用SEARCH,但更好地限制范围,因此我将使用第2行到第100行

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

SEARCH自动在其他文本中搜索值,因此不需要通配符[您应该从数据库中删除通配符,只需要“7ELEVEN”等]。如果一个(或多个)搜索匹配,那么它将返回一个数字,因此LOOKUP将会测试它是否存在。

SEARCH函数不区分大小写,如果您希望匹配区分大小写,则更改为FIND

<强>解释

使用时

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

返回与数据库大小相同的“数组”!B $ 2:B $ 100。对于Database中的每个值!B $ 2:B $ 100你得到一个数字(如果在B2中找到该特定值,那就是该值的开始位置)或者你得到#VALUE!错误。

然后当您在该数组中查找类似2 ^ 15的“bignum”时,即

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

返回数组中找到的最后数字....或者如果没有匹配则返回#N / A,因此使用ISNUMBER标识是否至少有一个匹配。

如果要查看

返回的整个数组

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

然后将其放入单元格然后选择该单元格,按F2选择公式,按F9查看整个数组。

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

=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,"")

但该版本需要“数组输入” - 即您需要使用组合键 CTRL + SHIFT + ENTER 确认公式该公式用大括号括起来,如{和}

注意:此处使用2 ^ 15,因为它保证的数量大于SEARCH函数可以返回的任何数字。 2 ^ 15 = 32768但是单元格中的最大字符数比1 - 32767