2016-04-21 29 views
3

我在Excel中創建預算,因此我有一些類別和子類別。與其各自的父類別相比,子類別是由1個單元格指定的。子課程當然可以有自己的子類別。地址上面第一個使用的單元格

在我的「類別樹」旁邊的列中,我想打印「類別路徑」。

比方說,我有類別下面的樹: Category tree

我現在想的「類路徑」被旁邊印像這樣:我想我可以組成類別 enter image description here

路徑與父類別的類別路徑(如果有)以及當前行中的類別名稱。 由於子類別可以有自己的子類別,因此我不知道當前行中的類別名稱存儲在哪個列中。爲了獲取當前行的類別名稱,我用下面的公式(上this site (German)找到):

{=INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0))} 

我知道有沒有類別超過五個層次深,因此我可以savely「硬編碼」如第7行的範圍爲A7:F7,並根據上述公式接收「副作業」。

現在來棘手的部分(至少對我來說)和我問這個問題的原因: 我需要獲得父類別的行,以便我可以使用父類別路徑來組成類別路徑的子類別。 在這種情況下,將

{=H4&" > "&INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0))} 

我不知道如何動態地計算父類路徑的地址。從another German site我有一個公式,進入正確的方向,將返回父類「工資薪金&」行:

{=MAX((A1:A7<>"")*ROW(A1:A7))} 

但是,只有當公式中的矩陣是恆定的。它不適用於動態計算的矩陣。動態矩陣範圍應爲A1A7在「副業」爲一個是列留給類別名稱的情況下,是第一個行(和行我要向上搜索到)和是當前行。該矩陣的動態部分是A和。

爲了構成矩陣(所述DYNAMIC_MATRIX)我使用以下公式:

{=INDIRECT(ADDRESS(1;CATEGORY_COLUMN-1)&":"&ADDRESS(ROW();CATEGORY_COLUMN-1))} 

CATEGORY_COLUMN哪裏是我的第一式包裹在COLUMN()

{=COLUMN(INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0)))} 

不幸的是,MAX(...式與DYNAMIC_MATRIX一起使用時返回錯誤:

{=MAX((DYNAMIC_MATRIX<>"")*ROW(DYNAMIC_MATRIX))} 

要繞過我NOT(ISBLANK(DYNAMIC_MATRIX))取代DYNAMIC_MATRIX<>""錯誤:

{=MAX(NOT(ISBLANK(DYNAMIC_MATRIX))*ROW(DYNAMIC_MATRIX))} 

現在,這公式看起來像沒有佔位符:

{=MAX(NOT(ISBLANK(INDIRECT(ADDRESS(1;COLUMN(INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0)))-1)&":"&ADDRESS(ROW();COLUMN(INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0)))-1))))*ROW(INDIRECT(ADDRESS(1;COLUMN(INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0)))-1)&":"&ADDRESS(ROW();COLUMN(INDEX(A7:F7;MATCH(TRUE;A7:F7<>"";0)))-1))))} 

我的公式返回當前行,而不是父類別的行(即,例如對於「副業」,它返回而不是)。

我不知道爲什麼:(

短,整個公式應做到以下幾點:
如果它是當前行的子類別,打印parent category's path > subcategory name如果父父類的路徑應該是Income > category name類是存儲在列A(並因此對自己無父類(除了「收入」組標題))。

這是絕對足夠了我,如果別人誰願意回答我的問題只集中在「獲得父母類別的路徑」部分:)

感謝,
馬塞爾

+0

最好。題。永遠。希望我可以讓你百回合。你只是想用公式來做到這一點? – findwindow

+0

謝謝恭維:)其實我想爲我的財務編寫一個JavaScript應用程序。由於我必須首先閱讀當前的框架,我想使用Excel作爲臨時解決方案。通過類別路徑,我希望能夠將一個類別的不同交易加在一張單獨的工作表上。 – marcelbrueckner

+0

好的。我在公式方面很糟糕,但我可以通過VBA做到這一點。那麼,你只是想要公式還是VBA好? – findwindow

回答

4

這裏有一個答案,將走出5個級別中的問題提出的要求。

基於公式Here

=LOOKUP(2,1/($A$2:A2<>""),$A$2:A2) & 
IF(COUNTA($B2:$D2)>0,">" & LOOKUP(2,1/($B$2:B2<>""),$B$2:B2) & 
IF(COUNTA($C2:$D2)>0,">" & LOOKUP(2,1/($C$2:C2<>""),$C$2:C2) & 
IF(COUNTA($D2:$D2)>0,">" & LOOKUP(2,1/($D$2:D2<>""),$D$2:D2) & 
IF(COUNTA($E2:$E2)>0,">" & LOOKUP(2,1/($F$2:F2<>""),$F$2:F2),""),""),""),"") 

通知我把收入在自己的專欄,只要你做,當你在縮進約例外,當你不知道它的數據管理麻煩(這數據存儲格式已經不是很大)。

enter image description here

一個更好的結構,在我看來,是讓所有向下填充(更像是一個數據庫)中和名作,然後如果你願意,你可以使用數據透視表和這樣的分析數據更容易。

+0

非常感謝。這爲我做了詭計。此外,它比我的方法更容易,因此更容易理解,並在必要時延長。做得好 :) – marcelbrueckner

相關問題