2010-02-04 62 views
1

(A)SUMPRODUCT(A1:A3,B1:B3)== A1 * B1 + A2 * B2 + A3 * B3倒车行

相反,就是我后

(B)SumProduct(A1:A3,Reverse(B1:B3))== A1 * B3 + A2 * B2 + A3 * B1

在excel 2003/excel 2007中有没有一种简单的方法来实现这一点?这些值的自然排序是A1→A3和B1→B3,因此颠倒单元格的含义并不令人满意;但在工作表的其他地方创建B1:B3的反转副本似乎很笨拙。

+3

您应该接受其他问题的答案。 – SLaks 2010-02-04 18:45:43

回答

1

的题目是“换位列表数据”我看不出不涉及在VBA(或类似)(一)自定义功能的解决方案或部分(B)一个额外的列结果。

如果您不希望列C成为(隐藏)反向列表,您会接受列C成为如下列表:A1 * B3,A2 * B2,A3 * B1,然后可以将它们相加?有可能使用与@ e.tadeu的答案中提到的类似的公式来获得这个(使用OFFET和ROW函数)。

+0

我接受这一点,因为第一段是“不,不能完成”的变体拼写。 – VoiceOfUnreason 2010-05-06 19:30:23

3
+0

该解决方案在电子表格的其他地方创建了一个反转副本。 – VoiceOfUnreason 2010-02-04 19:09:32

+0

无论如何只需要将反转副本隐藏起来...... :) – 2010-02-09 14:15:31

+1

相关部分被称为“反转一排的顺序”。这是一个很好的发现。它解决了我如何提出建议,但更好。 – Oddthinking 2010-02-21 01:30:50

1

我偶然发现这个问题,因为我试图找到这个问题的答案问题,特别是与SUMPRODUCT一起使用的解决方案。

带链接的上一篇文章很有用,并且设计了以下内容。请注意,为了简化和清晰起见,原始参考已更改为使电子表格公式更易于理解。如果需要将反转应用于列(INDIRECT,COLUMN和COLUMNS功能文档将证明有用),则可以通过使用INDIRECT和R1C1参考样式来实现必要的更改。

在Excel(Excel 2010中检查),即SUMPRODUCTs在A6的阵列式:A8与B6阵列的逆转:B8(比方说B8:B6)可以是

=SUMPRODUCT(A6:A8,N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0))) 

的Excel的反转部分是N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)),它也可以在任何位置用作多单元格阵列公式(ctrl-shift-enter) - 要反转的阵列在B6:B8中。

简要说明:N()对于将OFFSET返回的引用转换为可在SUMPRODUCT内部使用的值数组是很有必要的。 (没有N()的OFFSET会使SUMPRODUCT中的公式无效,并且它会将大多数非数字转换为0,如预期的那样,它会将TRUE转换为1.)

OFFSET将电子表格中的数组作为参数,并按相反的顺序放置这些值。 (在这种情况下,在3-1 = 2处的原始偏移量进入新的数组位置0,3-2 = 1变为1,最后3-3 = 0变为2.)ROW()函数创建一个连续数字的数组可以从总阵列的长度中减去[请注意,没有最终的S,并且使用A1:A3来获得{1,2,...},直到原始数组/行中的行数。]

此公式不适用于OpenOffice/LibreOffice电子表格应用程序。但INDEX可以通过模拟方法变得更加灵活。

OpenOffice/LibreOffice可以使用相同的方法,但具有INDEX功能。 OpenOffice/LibreOffice解决方案在Excel中不起作用,因为Excel不接受INDEX的row_num/col_num中的数组(任何数组作为参数都成为数组的单个顶部元素)。

在OpenOffice的/ LibreOffice中,即SUMPRODUCTs在A6的阵列式(Apache中的OpenOffice 4选中):A8与B6阵列的逆转:B8可能是

=SUMPRODUCT(A6:A8,INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)) 

反转部分OpenOffice的是INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0),它也可以在任何地方用作多单元阵列公式(ctrl-shift-enter) - 要反转的阵列在B6:B8中。

Excel版本使用这种方法(感谢,XOR LX:see here),这可能是因为索引可能需要阵列,而OFFSET只能取到工作表的引用非常有用:

=SUMPRODUCT(A6:A8,INDEX(B6:B8,N(INDEX(1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),,)),0)) 

[因为它与Excel的发生OFFSET版本以上,N(INDEX([...])修改的公式在OpenOffice中不起作用,如果使用该应用程序,则必须取出包装功能。]

该方法类似于在Excel中用于OFFSET的一个。考虑到INDEX使用从1开始的索引,而OFFSET从0开始。与前面的情况一样,根据A1:A3中的行号动态创建一个数组,作为数组和位置变化索引的模板。

这个很晚的答案不太可能有助于原始海报,但它可能为未来用户提供类似问题的时间节省。

+0

不客气! :-) – 2016-09-29 08:06:38