ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Discussion (Misc queries) (https://www.excelbanter.com/excel-discussion-misc-queries/)
-   -   Need Excel solution - mnthy rtrns using "Modified Dietz" (https://www.excelbanter.com/excel-discussion-misc-queries/222637-need-excel-solution-mnthy-rtrns-using-modified-dietz.html)

npappous

Need Excel solution - mnthy rtrns using "Modified Dietz"
 
I need a Excel solution to cazluclating monthly returns using "Modifed
Dietz". Has anyone done this?

Shane Devenshire

Need Excel solution - mnthy rtrns using "Modified Dietz"
 
Hi,

You can do that in the spreadsheet but its probably easier with a custom VBA
function:

Public Function MDIETZ(dStartValue As Double, dEndValue As Double, iPeriod
As Integer, rCash As Range, rDays As Range) As Double

'Jelle-Jeroen Lamkamp 10 Jan 2008
Dim i As Integer: Dim Cash() As Double: Dim Days() As Integer
Dim Cell As Range: Dim SumCash As Double: Dim TempSum As Double

'Some error trapping
If rCash.Cells.Count < rDays.Cells.Count Then MDIETZ =
CVErr(xlErrValue): Exit Function
If Application.WorksheetFunction.Max(rDays) iPeriod Then MDIETZ =
CVErr(xlErrValue): Exit Function

ReDim Cash(rCash.Cells.Count - 1)
ReDim Days(rDays.Cells.Count - 1)

i = 0
For Each Cell In rCash
Cash(i) = Cell.Value: i = i + 1
Next Cell

i = 0
For Each Cell In rDays
Days(i) = Cell.Value: i = i + 1
Next Cell

SumCash = Application.WorksheetFunction.Sum(rCash)

TempSum = 0
For i = 0 To (rCash.Cells.Count - 1)
TempSum = TempSum + (((iPeriod - Days(i)) / iPeriod) * Cash(i))
Next i

MDIETZ = (dEndValue - dStartValue - SumCash) / (dStartValue + TempSum)

End Function

Note: I do not take credit for this code.

--
If this helps, please click the Yes button.

Cheers,
Shane Devenshire


"npappous" wrote:

I need a Excel solution to cazluclating monthly returns using "Modifed
Dietz". Has anyone done this?



All times are GMT +1. The time now is 04:30 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com