Excel – 没有VBA /macros的水平数据公式?

我的数据目前采用以下格式(我可以将其移至最适合此目的的位置,但我想知道这是否可能)。

CELL1 CELL2 CELL3 CELL4 CELLn ITEM # MATERIAL # MATERIAL # MATERIAL 

一个例子可能是:

 ABCD n Tacos 5 Tortillas 6 Garlic 4 Onions 3 Peppers Banana // These cells are empty because Bananas need no ingredients. Pasta 2 Garlic 3 Sauce 

我想要一个公式来检查A列中的每一个独特的项目,并且每个项目都要经过该项目的所有成分(在B列 – > 无限列)。 计算每种成分,每种成分需要多less,然后按以下方式输出:

 Torillas 5 Garlic 8 Onions 4 Peppers 3 Sauce 3 

如果这是一种编程语言,我可以轻松地用几个for循环来做到这一点,但只是使用IFCOUNTIFSUM ,我不知道从哪里开始。

这是我的build议:将表内的数据转换为2个向量,然后使用一个简单的数据透视表按类别进行求和。

所以首先我要用数据( B2:E4 )来定义所有的区域作为命名的范围materials 。 然后我用一个令人讨厌的公式来创build2个向量,一个是项目,一个是数量。

  1. 数量:
 = IF(ISERROR(LEFT(OFFSET(材料,TRUNC((ROW() -  ROW($ A $ 9))/列(的材料)),MOD(ROW() -  ROW($ A $ 9),COLUMNS(材料)) (材料),TRUNC((ROW() -  ROW($ A $ 9))/ COLUMNS(材料)),MOD(ROW() -  ROW($ A $ 9),COLUMNS (材料)),1,1)))),0,VALUE(LEFT(OFFSET(材料,TRUNC((ROW() -  ROW($ A $ 9))/列(的材料)),MOD(ROW() - (材料),1,1),find(“”,OFFSET(材料,TRUNC((ROW() - 行($ A $ 9))/ COLUMNS(材料)),MOD( ROW() -  ROW($ A $ 9),COLUMNS(材料)),1,1)))))
  1. 对于项目:
 = IF(ISERROR(MID(OFFSET(材料,TRUNC((ROW() -  ROW($ B $ 9))/列(的材料)),MOD(ROW() -  ROW($ B $ 9),COLUMNS(材料)) (材料),TRUNC((ROW() -  ROW($ B $ 9))/ COLUMNS(材料)),MOD(ROW() -  ROW($ B $ 9),COLUMNS (材料)),1,1))+ 1,LEN(OFFSET(材料,TRUNC((ROW() -  ROW($ B $ 9))/列(的材料)),MOD(ROW() -  ROW($ B $ 9),COLUMNS(材料)),1,1)))) “”,MID(OFFSET(材料,TRUNC((ROW() -  ROW($ B $ 9))/列(的材料)),MOD(ROW (材料),1,1),FIND(“”,OFFSET(材料,TRUNC((ROW() -  ROW($ B $ 9))/ COLUMNS(材料)) ,MOD(ROW() -  ROW($ B $ 9),COLUMNS(材料)),1,1))+ 1,LEN(OFFSET(材料,TRUNC((ROW() -  ROW($ B $ 9))/列(材料)),MOD(ROW() -  ROW($ B $ 9),COLUMNS(材料)),1,1))))

将其粘贴到相关向量的第一个单元格中,然后将所有单元格引用(所有$A$9$B$9 )更改到刚刚粘贴公式的单元格(每个公式与其自己的单元格相关) 。 保持绝对的参考 。 最后你拖下来,直到你到达数据的最后一个项目(所以你vector的长度ROWS(materials)*COLUMNS(materials)长度)。

现在,您只需在这个向量上添加一个Pivot表格,并过滤出空白单元格。

按项目总结

告诉我是否解决了这个问题;)

PS如果你想让我解释一下这个,请写下评论

假定A2:E4包含数据,并且A9:A13包含要返回计数的成分,请在B9中input以下公式,按CONTROL + SHIFT + ENTER确认,然后复制:

 =SUM(IF(RIGHT($B$2:$E$4,LEN(A9))=A9,LEFT($B$2:$E$4,FIND(" ",$B$2:$E$4)-1)+0)) 

相应地调整范围。

这是我能做的

 =SUM(IF(IFERROR(SEARCH(G6,$B$2:$E$4),0)>0,VALUE(LEFT($B$2:$E$4,SEARCH(CHAR(32),$B$2:$E$4)-1)),0)) 

在这里输入图像说明

(p / s:我换大蒜面食到5,我爱大蒜)