颠倒excel公式中的行

(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,所以颠倒单元格的含义是不令人满意的。 但是在工作表的其他地方创buildB1:B3的反转副本似乎很笨拙。

我看不到一个解决scheme不涉及(a)VBA(或类似的)中的自定义函数或(b)具有部分结果的额外列。

如果你不喜欢列C成为(隐藏)反向列表,你会接受列C成为一个列表:A1 * B3,A2 * B2,A3 * B1,然后可以相加? 用@ e.tadeu的答案中提到的公式可以使用类似的公式(使用OFFET和ROW函数)。

我偶然发现这个问题,因为我试图find这个问题的答案,尤其是与SUMPRODUCT一起使用的解决scheme。

以前的链接是有用的,下面已经devise。 请注意,为了简单和清晰起见,原始引用已被更改为使电子表格公式更易于理解。 如果需要将反转应用于列(INDIRECT,COLUMN和COLUMNSfunction文档将certificate有用),可以通过使用INDIRECT和R1C1引用样式来实现必要的更改。

在Excel中(在Excel 2010中检查),将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()函数创build一个连续数字的数组可以从总arrays的长度中减去[请注意,没有最终的S,并且A1:A3已经被用于获得{1,2,…},直到原始数组/行中的行数]

此公式在OpenOffice / LibreOffice电子表格应用程序中不起作用。 但INDEX可以用模拟方法变得更加灵活。

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

在OpenOffice / LibreOffice(在Apache OpenOffice 4中检查过)中,在A6: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) ,它也可以作为多单元arrays公式(ctrl-shift-enter)任何地方 – 要反转的数组在B6:B8中。

用这种方法的Excel版本(谢谢,XOR LX: 请看这里 )这可能是非常有用的,因为INDEX可以使用数组,而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中的行号dynamic地创build一个数组,以用作数组和位置改变索引的模板。

这个非常迟的答案不太可能有助于原始的海报,但是可能为未来的用户提供类似的问题。