使用Sumif和部分字符串的vlookup

时间:2017-06-01 03:41:28

标签: excel excel-formula

所以基本上我有一个数据表和一个映射表。 映射表通过查看部分字符串来确定每个类别属于哪个类。然后我计算出属于同一类的总值。

虽然我知道我可以通过在数据表中添加vlookup / index匹配列来实现此目的。有没有办法使用单一公式完成输出?

原因是原始数据表包含一堆vba代码所依赖的其他列,因此我不想在可能的情况下修改该表。

数据表:

Name        Values
dog1        2
dog2        3
dog3        4
cat1        1
cat2        2
trout1      5
trout2      6
trout3      7

映射表:

Category    Class
dog         pet
trout       fish
cat         pet

输出:

Class Total
pet   12

2 个答案:

答案 0 :(得分:3)

尝试这种情况:

使用索引/匹配查找类的类别,附加通配符并将其放入Sumif函数中。单元格H3中的公式如下,向下复制。

=SUMIF($A$2:$A$7,INDEX($D$3:$D$4,MATCH(G3,$E$3:$E$4,0))&"*",$B$2:$B$7)

enter image description here

评论后编辑:如果多个类别映射到同一个类,则公式解决方案不再可行。相反,请考虑使用Power Pivot和Excel数据模型以及表之间的关系。您将需要以下表格:

  • 名称和值
  • 的初始数据输入表
  • 将名称映射到类别
  • 的表格
  • 将Category映射到类
  • 的表

然后,您可以将这些表添加到Power Pivot中的数据模型并定义关系。enter image description here enter image description here

现在,您可以使用Category / Class表中的类构建一个数据透视表,该表总结了初始数据输入表中的值。

Power Pivot是Excel 2010至2013的免费插件,内置于Excel 2016的企业版。

enter image description here

答案 1 :(得分:2)

它可以通过数组公式工作,但我不会说它很优雅。

列出不同类值

的相当标准的公式
=IFERROR(INDEX(E$2:$E$10,MATCH(0,COUNTIF($G1:$G$1,$E$2:INDEX($E$2:$E$10,COUNTA($E$2:$E$10))),0)),"")

然后将每个不同类值的SUMIF映射到其对应的类别值,并将其括在SUM中以获取所有类别的总数

=IF(G2="","",SUM(SUMIF($A$2:$A$10,"*"&IF($E$2:$E$10=G2,$D$2:$D$10,"~~~")&"*",$B$2:$B$10)))

enter image description here