我在Excel中創建預算,因此我有一些類別和子類別。與其各自的父類別相比,子類別是由1個單元格指定的。子課程當然可以有自己的子類別。地址上面第一個使用的單元格
在我的「類別樹」旁邊的列中,我想打印「類別路徑」。
路徑與父類別的類別路徑(如果有)以及當前行中的類別名稱。 由於子類別可以有自己的子類別,因此我不知道當前行中的類別名稱存儲在哪個列中。爲了獲取當前行的類別名稱,我用下面的公式(上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))}
但是,只有當公式中的矩陣是恆定的。它不適用於動態計算的矩陣。動態矩陣範圍應爲A1到A7在「副業」爲一個是列留給類別名稱的情況下,是第一個行(和行我要向上搜索到)和是當前行。該矩陣的動態部分是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(並因此對自己無父類(除了「收入」組標題))。
這是絕對足夠了我,如果別人誰願意回答我的問題只集中在「獲得父母類別的路徑」部分:)
感謝,
馬塞爾
最好。題。永遠。希望我可以讓你百回合。你只是想用公式來做到這一點? – findwindow
謝謝恭維:)其實我想爲我的財務編寫一個JavaScript應用程序。由於我必須首先閱讀當前的框架,我想使用Excel作爲臨時解決方案。通過類別路徑,我希望能夠將一個類別的不同交易加在一張單獨的工作表上。 – marcelbrueckner
好的。我在公式方面很糟糕,但我可以通過VBA做到這一點。那麼,你只是想要公式還是VBA好? – findwindow