0

精简版:


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

长版:


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

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

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

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

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

提前致谢。

4

2 回答 2

1

您可以将公式更改为: =IF(ISNA(MATCH($B2&"*",database!B:B,0)),"",$C2)

我想这就是你要找的。

于 2013-08-07T20:54:46.460 回答
1

您可以使用SEARCHB2 中的所有 B 列值,但最好限制范围,因此我将使用第 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)

这将返回一个与 Database!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代替LOOKUPand来缩短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

于 2013-08-07T21:26:53.117 回答