我想根据选择使用sumproduct和两个不同的表

时间:2016-06-29 21:35:35

标签: excel vlookup

我正在研究一个统计模型,我们使用sumproduct通过将一个表中的系数与另一个表中的变量相乘来生成预测值。现在它正在手动完成,这需要时间。我想自动化它,但我无法解决这个问题。

我们使用concatenate来标识用于vlookup的不同行。两个表的变量列的数量相同。我需要在两个表中分别乘以每个变量单元并将它们相加,因此产生副产品。

这就是我想要做的事情

美国手机中产品A的预测模型1销售= sumproduct([表1中美国手机的年份变量],[美国手机产品的变量表2中的模型1])

我希望有人可以帮助我。

my sample file

1 个答案:

答案 0 :(得分:3)

概念证明

Proof of Concept

您需要更新引用以适合您的电子表格表位置。

在单元格E21中,使用以下内容并根据需要向右和向下复制:

=SUMPRODUCT(INDEX($G$3:$I$12,MATCH($B21&$A21&$C21,$A$3:$A$12,0),0),INDEX($F$15:$H$18,MATCH($A21&$C21&$D21&MID(E$20,16,1),$A$15:$A$18,0),0))

此过程已简化,因为您在前两个表中的每个表上都有一个唯一的ID标记,可以根据第三个表中的信息构建。如果您进入双位预测模型,则需要修改公式的MID()函数部分。 mid函数中的16表示表3中预测模型销售标题名称中数字的字符位置。因此,您需要保持该标题格式完全相同或修改MID中数字的位置()功能

更新1

公式说明

在此解决方案中使用以下公式:

我将首先假设您已经了解sumproduct(),因为您在遇到问题之前已经使用过它。有关sumproduct的一点需要注意的是,它会导致数组计算在括号内的部分上发生。在这种情况下,我们给它两个相同大小的范围。困难的部分更多的是确定这些范围的问题。

使用您的ID列作为查找行,我们使用match()函数来确定要使用的行。对于第一组变量,我们使用以下内容来确定要查看的行:

=MATCH($B21&$A21&$C21,$A$3:$A$12,0)

匹配由括号内的三个参数组成:

MATCH(what to look for, where to look, type of match)

我们需要在表中查找的是表3中各种单元格的串联,以在表1中构建ID。它可以使用完整的公式编写:

=CONCATENATE($B21,$A21,$C21)

但简短形式使用&改为使用:

=$B21&$A21&$C21

一旦我们找到了要查找的内容,我们需要查看的位置范围并提供表1中的ID列:

$A$3:$A$12

这现在留下了要执行的搜索类型的第三个也是最后一个参数。精确匹配似乎是最合适的匹配,因此提供了0的值。返回的匹配项是提供范围内的行。它相对于提供的范围而不是电子表格中的实际行。如果无法匹配,则会返回错误而不是行号。

现在我们知道了我们想要的行,我们可以将这些信息与INDEX()函数一起使用。 INDEX()函数由3个参数组成,第三个参数是可选的,具体取决于是否索引1D或2D范围:

INDEX(Range to work with, 2D Row or 1D Position reference, 2D Column reference)

在我们处理第一个表的情况下,要使用的范围是变量列表:

$G$3:$I$12

这是一个2D范围。因此,我们需要告诉INDEX()要查看的行以及要查看的列。对于要查看的行,我们使用前面讨论的MATCH()函数。由于我们需要所有列而不仅仅是特定列,因此我们使用值0.如果Match返回错误,或者如果提供的数字大于所选行数或列数,则INDEX()将返回错误。根据所讨论的信息,索引函数如下所示:

=INDEX($G$3:$I$12,MATCH($B21&$A21&$C21,$A$3:$A$12,0),0)

您可以尝试在单元格中输入上述内容,但它会给您一个错误。如果您在同一行中选择三个相邻的单元格,并在输入公式时使用 CONTROL + SHIFT + ENTER ,Excel将在周围添加{}公式,它将是一个数组公式,并应显示正在使用的三个变量。

上述相同的过程可用于确定表2中的第二个变量范围。这里唯一的区别是预测模型编号不在其自己的列中,而是在由文本包围的标题行中。因此需要使用MID()函数进入标题行,绕过周围的文本并拉出模型编号,以便它可以用作CONCATENATION()的一部分用于“寻找什么”中MATCH():

=MID(E$20,16,1)

MID()函数再次使用三个参数:

MID(Text to look in, which character to start at, how many characters to pull)

所以在这种情况下我们正在看E20中的标题。请注意行号上的锁定$,因此无论复制多远,公式总是在行20中查找。然后是第16个角色。在这种情况下,字符“1”并拉1个字符。如果标题只是1和2,则不需要MID函数,并且可以使用单元格(具有适当的锁定)。