2017-09-07 41 views
0

我的數據表:Excel的VBA或公式:XIRR的多帳戶多年

我的輸入是由多個賬戶的投資數據爲多年的左表。我想爲每個帳戶計算每年的XIRR。

權利表是我想要的典型輸出。但是,我無法弄清楚如何在Excel Formula的幫助下完成這項工作。或通過VBA。誰能幫忙?

實施例:

Example#1不允許圖像被上傳由於不具有像10或東西的聲譽。

回答

0

以下是一種方法。這種方法要求數據按帳戶和年份分類。該策略是(1)爲每個Acc#+ YEAR組合找到正確的第一行數據; (2)從該行提取數據到表的末尾; (3)過濾掉與該Acc#+ YEAR不相關的數據;和(4)計算XIRR。

要確定每個帳戶/年份組合的第一行數據,您可以通過將兩者連接在一起來製作唯一標籤。使用此公式(CTRL-SHIFT-ENTER)

enter image description here

:我由具有第一行的輔助表

=MATCH($F5&"_"&G$4,Account&"_"&Year,0) 

其中$ F5是將細胞與加#,G $ 4是一個帶有YEAR ##的單元格,Account是帳戶名稱的列,Year是多年的列。我用下劃線來劃分帳戶名稱和年份;如果您的帳戶名稱和年份不會相互衝突,您可以跳過此步驟。

現在可以計算XIRR。這裏的結果:

enter image description here

這裏的公式(再次CTRL-SHIFT-ENTER):

=XIRR(IF(OFFSET($A$2,G5,0,23-G5+1,1)=$K5,IF(OFFSET($B$2,G5,0,23-G5+1,1)=L$4,OFFSET($D$2,G5,0,23-G5+1,1),0),0),OFFSET($C$2,G5,0,23-G5+1,1)) 

我用OFFSET提取子陣列是開始於 「第一行」 (如上計算)並結束於數據表的底部。 (注意,這些子陣仍包含來自多個帳戶/年的數據,所以我們會在後面的步驟篩選)。在OFFSET($A$2,G5,0,23-G5+1,1)

  • $A$2高於帳戶名稱的細胞;
  • 我們從日期頂部開始排除G5行(G5是輔助表中的第一行之一);
  • 我們抵消了0列;
  • 我們抓23-G5+1行(23行應該換成你所有的行);和
  • 我們搶1列數據。

其他OFFSET的工作原理相同,列B(年),C(日期)和D(金額)除外。

下一步是從錯誤的Acc#或YEAR中過濾掉不需要的數據。這是使用兩個嵌套的IF語句完成的。其基本邏輯是,與0取代Amount每當我們有錯加#或年份:

=XIRR(IF(Account=TheAcct,IF(YEAR=TheYear,Amount,0),0),Date) 

這工作,因爲零現金流不影響XIRR計算。

除了篩選步驟,您還可以計算每個Acc + YEAR的最後一行。然後你會得到一個像這樣的公式:

=XIRR(OFFSET(Amount,FirstRow,0,LastRow-FirstRow+1,0),OFFSET(Date,FirstRow,0,LastRow-FirstRow+1,0)) 

希望有幫助。