Vloopup + INDEX并转置

时间:2015-06-08 00:58:41

标签: excel excel-formula

我确实需要以下情况的帮助。我试图使用vlookup或索引,我认为这对我来说非常先进,遗憾的是我不知道如何在这里附加excel文件,所以我将添加一个图像

我有一个巨大的数据库,我有他们购买的名称和产品,总共有5种产品,但不是每个人都试图购买所有产品,所以有一些人只想购买1。数据库包含垂直方式的信息,但我需要使用公式来横向获取与每个客户相关的所有信息。

在图像上,您将看到我的数据库来自A4:C12以及A14的产品类型:B18

我用E7中的黄色高亮一点:O12一个例子,输入公式后最终表格应如何显示。

我尝试过结合使用vlookup或索引,但问题是并非所有客户都购买了5种产品,例如Jorge只购买1套房子,这意味着其余的字段必须是空的

从E1:O4是我需要输入公式的地方。

enter image description here

1 个答案:

答案 0 :(得分:1)

这可以分为两部分,一部分为产品,一部分用于查找数量。

产品公式

因此,从产品公式开始,我可以通过使用:

来实现这一目标
=IF(SUMPRODUCT(($A$5:$A$12=$E2)*($B$5:$B$12=INDEX($B$14:$B$18,MATCH(F$1,$A$14:$A$18,0))))>0,INDEX($B$14:$B$18,MATCH(F$1,$A$14:$A$18,0)),"")

<强>解释

假设Product a属于F列

我将使用Saul

解释这一点

这可以通过使用两个不同的数组来实现。可以通过当前行上列出的名称检查名称。第二个阵列是根据产品列检查产品。所以对于名称数组:

Adam  =? Saul => False
Adam  =? Saul => False
Adam  =? Saul => False
Adam  =? Saul => False
Adam  =? Saul => False
Saul  =? Saul => True
Saul  =? Saul => True
Jorge =? Saul => False

现在使用INDEX($B$14:$B$18,MATCH(F$1,$A$14:$A$18,0))我们可以获取每列的当前产品的名称。使用产品A这个数组看起来像:

Car      =? Car => True
House    =? Car => False
Clock    =? Car => False
Umbrella =? Car => False
Computer =? Car => False
Car      =? Car => True
House    =? Car => False
House    =? Car => False

将由SUMPRODUCT包围的这两个数组相乘得到:

False * True  = 0*1 = 0
False * False = 0*0 = 0
False * False = 0*0 = 0
False * False = 0*0 = 0
False * False = 0*0 = 0
True  * True  = 1*1 = 1
True  * False = 1*0 = 0
False * False = 0*0 = 0
         SUMPRODUCT = 1

如果此金额为0,则此人不会订购此产品,如果该数量大于0,则该人员至少会被列为购买该产品。如果你需要额外的检查(如果数量可能是0),这可以增加到数组乘法。

IF语句中使用此内容,我们可以轻松返回任何内容("")或使用INDEX($B$14:$B$18,MATCH(F$1,$A$14:$A$18,0))生成的产品,具体取决于总和是否为0或0。最终公式。

QTY公式

QTY公式相当简单。只需使用前面描述的SUMPRODUCT方法,但在QTY列上进行扩充。现在一切都取决于您是否希望在没有产品时显示任何内容("")或0

显示0:

=SUMPRODUCT(($A$5:$A$12=$E2)*($B$5:$B$12=F2)*($C$5:$C$12))

什么都不显示:

=IF(F2="","",SUMPRODUCT(($A$5:$A$12=$E2)*($B$5:$B$12=F2)*($C$5:$C$12)))

<强>释

这非常简单,我们只是将我们之前到达的数组放在QTY列中:

     0 * 2 = 0
     0 * 3 = 0
     0 * 1 = 0
     0 * 2 = 0
     0 * 3 = 0
     1 * 2 = 2
     0 * 3 = 0
     0 * 1 = 0
SUMPRODUCT = 2

添加IF(F2="","",...)将检查产品是否列出,如果没有,那么它将不会在单元格中放置任何内容,否则它将放置数量。