2013-08-23 38 views
1

好的,這是一個嘮叨我一段時間的問題,我確實認爲我已經破解了它,但是...命名範圍以獲取當前單元格上方的單元格塊 - 重寫以避免循環引用

考慮下列工作表:

Spreadsheet

數據單元只包含數字1和薩姆細胞含有所示的公式。這一切都有效。

它利用下列名稱(與解釋):

RangeAboveAll 
=INDIRECT(CONCATENATE(ADDRESS(1,COLUMN()),":",ADDRESS(ROW()-1,COLUMN()))) 

的第一ADDRESS函數給出當前列的第一個單元的地址,所述第二地址函數給出當前小區上方的細胞。它們與a:CONCATENATE相交併傳遞給INDIRECT函數以將其轉換爲範圍參考。請注意,如果在頂行中使用,則會發生錯誤,因爲它應該如此。

BlankRowAbove 
=IFERROR(SMALL(IF(ISBLANK(RangeAboveAll),ROW(RangeAboveAll),""), 
COUNTIF(RangeAboveAll,"")),0) 

IF函數創建對應於所述RangeAboveAll與如果小區ISBLANK列數和0,如果它不是一個列表。然後用COUNTIF參數傳遞給SMALL函數,該參數計算空白單元的數量;因此,SMALL返回最後一個空白單元格的列號。然後將其封裝在IFERROR中以處理沒有空白單元格的情況。

RangeAboveBlock 
=INDIRECT(CONCATENATE(ADDRESS(1+BlankRowAbove,COLUMN()),":", 
ADDRESS(ROW()-1,COLUMN()))) 

使用相同的技術作爲RangeAboveAll名稱,這需要在最後一個空白小區的列(或0,如果沒有一個),並返回開始1低於這個和當前小區以上結束1的範圍內。如果當前單元格上方的單元格爲空白,則會創建一個循環引用,但這很好。

正如我所說的,所有這些工作都很好,直到頂部塊中的一個數據單元指向底部塊的結果。例如,如果單元格B1具有公式=B10

現在如果這樣做沒有動態範圍,這將不是循環引用,而是因爲動態範圍必須計算上面的所有單元格以便排除它們,所以會彈出循環引用。

這是一個特殊問題,因爲我們有一個電子表格,以下面的內容摘要開頭。現在可以通過開啓迭代來解決這個問題,但這會讓我們面對其他問題。它也可以用代碼實現,但我不想只爲此啓用宏。

任何人都可以看到一種方法來建立這種避免這個問題的命名範圍?

有關背景信息,有一個特定的問題(用戶錯誤),這是試圖克服。如果在B13中有一個靜態公式,例如=SUBTOTAL(B7:B12,9),並且您在B7或B12之下插入一行,則此新行將超出總和範圍。由於我們使用此電子表格作爲模板,爲許多不同項目的施工索賠準備工作,每個子項中的每行都有不同數量的行,因此將項目劃出價值數萬美元是一個問題。

+0

令人印象深刻的?但似乎是避免使用小計的一種非常複雜的方式,您能澄清一下:「頂部塊中的一個數據單元是否意味着底部塊的結果」 - 頂部的ColumnA是否使用從下往上的塊總數?儘管你的解釋很清楚,但我承認我並沒有真正承認支持你的問題,但有一種感覺,你試圖克服的障礙可能最好是繞過了。 – pnuts

+0

謝謝@pnuts - 總和只是作爲一個例子,它可以同樣使用小計,同樣的問題會出現。我將編輯該問題以準確顯示我的意思。 –

回答

0

可能不適合,但我需要更多的空間比評論!

如果數據開始了作爲左(我已經插入ColumnA提供小計「分組規則」),並應用小計的結果可能是,如右圖:

SO18395841 example

的相關部分是C2(即B2向右移動一列)確實包含一個涉及它下面的單元格的公式(具體來說,B10是什麼,即B8的總和是012)。

使用未打開迭代的小計未生成循環引用。 (公式自動調整爲=SUM(C8:C9)

你要知道,我想差不多可以實現「自己的方式」 - 而不是=B10使用=B8+B9

0

爲什麼不使用OFFSET

[C6] =SUM(OFFSET(C5;1-B6;0;B6;1)) 
+0

我認爲你可能意味着'= SUM(OFFSET(C5,1-B6,-1,B6,1))'(OP使用逗號分隔符),但無論哪種方式我都不確定這是否有幫助 - 你介意澄清效果,爲什麼不只是'= B6')? – pnuts

+0

我的Excel(2010英語)使用';'作爲公式參數分隔符。我假設「RangeAboveBlock」將是相對於「C6」的「C1:C5」。當然,如果我們只是總結'1's,'= C6'就適合了。我們缺少來自@Dale_M的一些澄清...... –

+0

謝謝 - 我正在解釋Q,好像只涉及A和B列(圖中的= SUM(RangeAboveBlock)僅僅表明B6中的5是計算)。正如你所說,更多的澄清可能會有所幫助! – pnuts

相關問題