我想根据select使用两个不同的表的sumproduct

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

我们正在使用连接来识别用于查找的不同行。 这两个表的variables列数是相同的。 我需要在两个表中分别乘以每个variables单元,并将它们相加,因此是副产品。

这是我想要做的

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

我希望有一个人可以帮助我。

我的示例文件

概念validation

概念验证

您将需要更新引用来套用电子表格表格位置。

在单元格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)) 

这个过程被简化了,因为您可以使用第三个表中的信息构build前两个表中的每个表上的唯一ID标记。 如果您进入双数字预测模型,公式的MID()函数部分将需要修改。 中间函数中的16是指表3中预测模型销售标题名称中数字的字符位置。因此,您需要保持该标题格式完全相同,或者修改MID()中的数字位置,function。

更新1

公式的解释

在这个解决scheme中使用了以下公式:

  • SUMPRODUCT
  • 指数
  • 比赛
  • CONCATENATE

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

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

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

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

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

我们需要在表格中查找的是表3中的各个单元格的连接,以便在表1中构buildID。可以使用完整的公式来编写它:

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

但使用&的短格式代替了:

 =$B21&$A21&$C21 

一旦我们find了需要查找的地方,我们需要从表1中查找并提供ID列的范围:

 $A$3:$A$12 

这现在留下了什么types的search执行的第三个也是最后一个论点。 完全匹配似乎是最适合执行的匹配,因此提供了0的值。 匹配的回报是提供的范围内的行。 它是相对于所提供的范围而不是电子表格中的实际行。 如果它不能匹配,它将返回一个错误,而不是一个行号。

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

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

在我们正在处理第一个表格的情况下,处理的范围是您的variables列表:

 $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) 

你可以尝试在单元格中input上面的内容,但会给你一个错误。 如果在同一行中select三个相邻的单元格,并在input公式时使用CONTROL + SHIFT + ENTER ,则Excel将在公式周围添加{},它将是一个数组公式,并将显示三个正在使用的variables。

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

 =MID(E$20,16,1) 

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

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

所以在这种情况下,我们正在查看E20中的标题。 注意行号锁$,所以公式总是在第20行查看,无论它被复制多远。 然后到第十六个angular色。 在这种情况下,字符“1”,并拉1个字符。 如果头部刚好是1和2,则不需要MIDfunction,并且可以使用具有正确locking的单元。