2010-02-04 61 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