Excel - 没有VBA /宏的水平数据公式?

时间:2016-07-16 18:45:45

标签: excel excel-formula

我的数据目前采用以下格式(我可以将其移动到最适合此目的但我想先知道这是否可行)。

CELL1   CELL2       CELL3       CELL4       CELLn

ITEM    # MATERIAL  # MATERIAL  # MATERIAL

这方面的一个例子可能是:

A       B           C           D           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

我想要一个公式来遍历col A中的每个独特项目,并且每个项目都会遍历该项目的所有成分(在B列 - >列无穷大中)。计算每种成分的数量以及每种成分的数量,然后按以下方式输出:

Torillas    5
Garlic      8
Onions      4
Peppers     3
Sauce       3

如果这是一种编程语言,我可以通过一些for循环轻松完成,但只使用IFCOUNTIF以及SUM,我根本不知道从哪里开始

3 个答案:

答案 0 :(得分:0)

假设A2:E4包含数据,而A9:A13包含要返回计数的成分,请在B9中输入以下公式,使用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))

相应地调整范围。

答案 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))

enter image description here

(p / s:我将意大利面的大蒜换成5,我喜欢大蒜)

答案 2 :(得分:0)

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

首先,我将所有区域定义为数据(B2:E4)作为命名范围materials。然后我使用一个讨厌的公式来创建2个向量,一个用于项目,一个用于数量。

  1. 数量:
  2. =IF(ISERROR(LEFT(OFFSET(materials,TRUNC((ROW()-ROW($A$9))/COLUMNS(materials)),MOD(ROW()-ROW($A$9),COLUMNS(materials)),1,1),FIND(" ",OFFSET(materials,TRUNC((ROW()-ROW($A$9))/COLUMNS(materials)),MOD(ROW()-ROW($A$9),COLUMNS(materials)),1,1)))),0,VALUE(LEFT(OFFSET(materials,TRUNC((ROW()-ROW($A$9))/COLUMNS(materials)),MOD(ROW()-ROW($A$9),COLUMNS(materials)),1,1),FIND(" ",OFFSET(materials,TRUNC((ROW()-ROW($A$9))/COLUMNS(materials)),MOD(ROW()-ROW($A$9),COLUMNS(materials)),1,1)))))
    
    1. 对于项目:
    2. =IF(ISERROR(MID(OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1),FIND(" ",OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1))+1,LEN(OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1)))),"",MID(OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1),FIND(" ",OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1))+1,LEN(OFFSET(materials,TRUNC((ROW()-ROW($B$9))/COLUMNS(materials)),MOD(ROW()-ROW($B$9),COLUMNS(materials)),1,1))))
      

      将它粘贴到相关矢量的第一个单元格中,然后将所有单元格引用(所有$A$9$B$9)更改为刚刚粘贴公式的单元格(每个公式都包含尊重其自己的细胞)。 保留绝对引用。最后,将其向下拖动,直到您到达数据中的最后一项(因此向量的长度为ROWS(materials)*COLUMNS(materials))。

      现在,您只需在此向量上添加一个数据透视表,并过滤掉空白单元格。

      Summing by item

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

      P.S。另外,如果您希望我对此进行更多解释,请在评论中写下我