简短版:
基本上我想做this,但是在excel中。我想查询一个CONTAINS通配符的表,而不是查询使用通配符的表。
长版:
我正在创建一个电子表格,以便在每个月末汇总我的银行帐户交易。我想将银行对帐单中的交易组织成“杂货”,“娱乐”,“燃料”等类别,然后总结每个类别的总金额。
我有一张充当数据库的工作表,其中列出了每个类别的已知帐户名称(例如,在“服装”下我有我去过的所有服装店的帐户名称)。然后,我有另一个工作表,前两列包含事务(帐户名称和金额),然后是每个类别的列。我使用以下公式将第2列中的每个金额复制到正确的类别列中:
=IF(ISNA(MATCH($B2,database!B:B,0)),"",$C2)
如果B列是我的银行对帐单中的“帐户名称”列,则C列包含金额。
只要数据库工作表中的数据完全匹配,这就可以正常工作。但是很多帐户名称都是相似的,例如“7elevenl12345”,“7eleven836549”等。如何在我的数据库中添加带有“7eleven *”等通配符的字符串?
提前致谢。
答案 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
代替LOOKUP
和ISNUMBER
,可以缩短公式的两个版本,即对于后一个版本,您可以使用
=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
少