Excel:使用关键字索引匹配,然后求和结果(无VBA)

Excel:使用关键字索引匹配,然后求和结果(无VBA),excel,indexing,lookup,Excel,Indexing,Lookup,我有一张交易清单。它包括对交易和交易总成本的描述。 我正在寻找一种方法,不用VisualBasic,使用单元格中输入的逗号分隔的关键字搜索所有匹配的事务,然后给出它们的总值 例如: B4:B6是用于查找的关键字。 C4应在B10:B26范围内查找包含B1中任何关键字(特易购、合作或waitrose)的所有单元格,并返回C10:C26范围内相应值的总值。在这种情况下,其总和应为C11、C16、C21、C23、C25 需要注意的是,它不应该区分大小写 可以这样做吗?您可以使用数组函数来实现这一点。

我有一张交易清单。它包括对交易和交易总成本的描述。 我正在寻找一种方法,不用VisualBasic,使用单元格中输入的逗号分隔的关键字搜索所有匹配的事务,然后给出它们的总值

例如:

B4:B6是用于查找的关键字。 C4应在B10:B26范围内查找包含B1中任何关键字(特易购、合作或waitrose)的所有单元格,并返回C10:C26范围内相应值的总值。在这种情况下,其总和应为C11、C16、C21、C23、C25

需要注意的是,它不应该区分大小写


可以这样做吗?

您可以使用数组函数来实现这一点。这些函数的操作方式类似于“Sumifs”/“Countifs”/“Sumproduct”:它们执行的功能通常设计用于查看整个单元格范围内的特定单元格

首先,让我们将“giffgaff”/“paypal”的总数相加:

在单元格C5中,使用以下公式[因为它是一个数组公式,每次编辑单元格时必须按CTRL+SHIFT+ENTER进行确认,而不是只按ENTER],然后向下拖动到C6

=sum(if(iserror(search(B5,$B$10:$B$26)),"",$C$10:$C26))
这将查看B10:B26中的每一行(请注意,不能选择整个列,因为数组公式会计算所有单元格,甚至是空白单元格-因此这会大大降低性能。您必须明确标识您关心的行,如是),如果在B4中搜索该项时出错,这意味着该术语不会出现在该特定行上。如果没有错误,它将从列C中提取金额。然后将所有这些行相加,得到一个总数

现在,要对单元格C4执行相同的操作,您需要增加一个复杂性,即首先将出现在逗号之间的每个术语分开。我同意@Tom Sharpe的观点,你可能应该在不同的细胞中这样做,以便更清楚地知道你在做什么。这可以通过在逗号之间单独提取术语,然后进行单独合计(使用上面的数组公式)来实现

为了最有效地实现这一点,我必须在C列中使用一个helper列,它将标识B列中的文本中有多少逗号,如C4中所示:

=len(B4)-len(substitute(B4,",",""))
这取B4的长度,减去B4的长度,其中所有逗号都已被空格替换-给出了#个逗号


然后,可以使用MID和SUBSTITUTE函数,使用该公式在逗号之间拆分单词。如果你需要详细说明如何做到这一点,请告诉我。将单个单词分解后,可以使用上面的数组函数进行搜索。

可以使用数组函数进行搜索。这些函数的操作方式类似于“Sumifs”/“Countifs”/“Sumproduct”:它们执行的功能通常设计用于查看整个单元格范围内的特定单元格

首先,让我们将“giffgaff”/“paypal”的总数相加:

在单元格C5中,使用以下公式[因为它是一个数组公式,每次编辑单元格时必须按CTRL+SHIFT+ENTER进行确认,而不是只按ENTER],然后向下拖动到C6

=sum(if(iserror(search(B5,$B$10:$B$26)),"",$C$10:$C26))
这将查看B10:B26中的每一行(请注意,不能选择整个列,因为数组公式会计算所有单元格,甚至是空白单元格-因此这会大大降低性能。您必须明确标识您关心的行,如是),如果在B4中搜索该项时出错,这意味着该术语不会出现在该特定行上。如果没有错误,它将从列C中提取金额。然后将所有这些行相加,得到一个总数

现在,要对单元格C4执行相同的操作,您需要增加一个复杂性,即首先将出现在逗号之间的每个术语分开。我同意@Tom Sharpe的观点,你可能应该在不同的细胞中这样做,以便更清楚地知道你在做什么。这可以通过在逗号之间单独提取术语,然后进行单独合计(使用上面的数组公式)来实现

为了最有效地实现这一点,我必须在C列中使用一个helper列,它将标识B列中的文本中有多少逗号,如C4中所示:

=len(B4)-len(substitute(B4,",",""))
这取B4的长度,减去B4的长度,其中所有逗号都已被空格替换-给出了#个逗号


然后,可以使用MID和SUBSTITUTE函数,使用该公式在逗号之间拆分单词。如果你需要详细说明如何做到这一点,请告诉我。一旦你把单个单词分解出来,你就可以像上面那样使用数组函数进行搜索。

是的,但是如果你把Tesco、co-op和waitrose放在不同的行上,并在末尾加上单独的总数,那就容易多了。到目前为止,你做了哪些尝试?是否有一个用逗号分隔的
最大
关键字数?我尝试过使用SUMPRODUCT,但这只适用于精确匹配和单个字符串。索引、匹配和通配符用于部分匹配,但同样,如果我有可变条件,它就不起作用。问题是我真的不知道如何为索引匹配函数创建OR语句,或者如何将字符串分隔为数组。不,不应该有一个最大值。UDF是一个可接受的解决方案吗?只要一个VBA函数就可以了。刚才看到你的评论-“不应该有最大值”;请看下面我的答案——您肯定需要使用拖拽法,将每个单词用逗号分隔开。就你的目的而言,任何没有VBA的东西都会非常难看(比如在一整张背景公式中,每个单词都用逗号分隔)。是的,但是如果你把Tesco、co-op和waitrose放在单独的行中,并在末尾加上单独的总数,那就容易多了。到目前为止,你做了哪些尝试?是否预期有一个用逗号分隔的
最大
关键字数?我尝试使用SUMPRODUCT,但这只适用于精确匹配和singl