根据多个条件从另一个工作表中提取值

时间:2020-04-25 20:24:13

标签: excel excel-formula powerquery

表1,工作表a

+-----------+------------+-----------+------------------------+
| recipient | activity   | funding a | funding b from table 2 |
+-----------+------------+-----------+------------------------+
| group 1   | basketball | 200       |                        |
+-----------+------------+-----------+------------------------+
| group 1   | soccer     | 80        |                        |
+-----------+------------+-----------+------------------------+
| group 2   | soccer     | 18        |                        |
+-----------+------------+-----------+------------------------+
| group 3   | tennis     | 35        |                        |
+-----------+------------+-----------+------------------------+

表2工作表b

+-----------+------------+-----------+
| recipient | activity   | funding b |
+-----------+------------+-----------+
| group 1   | basketball | 100       |
+-----------+------------+-----------+
| group 1   | soccer     | 50        |
+-----------+------------+-----------+
| group 2   | soccer     | 25        |
+-----------+------------+-----------+
| group 3   | tennis     | 30        |
+-----------+------------+-----------+

我的目标是将表2工作表b中“资金b”列中的值插入表1工作表a中。请记住,这是一个简化的表,并且值在我的原始工作表中是无序的。

我尝试在表1的“来自表2的资金b”单元中输入以下内容,但出现错误:

=INDEX(table2[funding b],MATCH(1,([@[recipient]]=table2[Recipient])&([@[funding a]]=table2[fundingb]),0))

我不确定如何继续进行操作,因此无论是使用公式还是使用power-query,任何帮助或提示都将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

如果我理解正确,则需要通过搜索收件人和活动来在第二张表中找到合适的资金。如果是这样,如果收件人和活动的组合是唯一的,则可以使用SUMPRODUCT函数:

=SUMPRODUCT(([@recipient]=Table2[recipient])*([@activity]=Table2[activity])*Table2[funding b])

如果不是唯一的,请使用INDEX / MATCH作为数组公式来返回找到的第一个值:

=INDEX(Table2[funding b],MATCH(1,([@recipient]=Table2[recipient])*([@activity]=Table2[activity]),0))

ctrl + shift + enter确认编辑后的数组公式

enter image description here

答案 1 :(得分:0)

替代方法(远没有@basic的答案有效)。在表2中使用列助手。 我们使用以下代码创建一个id列:

=CONCAT(Table2[@[recipient]:[activity]])

然后我们使用标准的VLOOKUP。

=VLOOKUP(CONCAT(Table1[@[recipient]:[activity]]),Table2[#All],4,FALSE)

另一种选择:这个可怕的衬里(使用文本功能):

=INDEX($I$3:$K$6,(LEN(LEFT(TEXTJOIN(";",TRUE,$I$3:$J$6),SEARCH(TEXTJOIN(";",TRUE,B3:C3),TEXTJOIN(";",TRUE,$I$3:$J$6))))-LEN(SUBSTITUTE(LEFT(TEXTJOIN(";",TRUE,$I$3:$J$6),SEARCH(TEXTJOIN(";",TRUE,B3:C3),TEXTJOIN(";",TRUE,$I$3:$J$6))),";","")))/2+1,3)

Vlook