Search code examples
vbaformulacalculation

VBA Novice - Calculations are Wrong


Thank you for any help in advance. I'm trying to create a function in excel where other people can input the type of bond, rating, and duration as below. The calculations are kind of close (within 2%) but never exact. When I put the actual calculation into excel I am getting different figures than the code is spitting out. Where am I going wrong?

Function S2Test(Rating As String, RiskCategory As String, Duration As Double)

Dim SDuration2 As Double
SDuration2 = WorksheetFunction.Max(1, Duration)

' 5 to 10 Duration Bucket - need to fix NR
If Rating = "BBB" And RiskCategory = "Corporate" And SDuration2 > 5 < 10 Then
    S2Test = 0.125 + (Duration - 5) * 0.015
ElseIf Rating = "AAA" And RiskCategory = "Corporate" And SDuration2 > 5 < 10 Then
    S2Test = 0.045 + (Duration - 5) * 0.005
ElseIf Rating = "AA" And RiskCategory = "Corporate" And SDuration2 > 5 < 10 Then
    S2Test = (Duration - 5) * 0.006 + 0.055
ElseIf Rating = "A" And RiskCategory = "Corporate" And SDuration2 > 5 < 10 Then
    S2Test = 0.07 + (Duration - 5) * 0.007
ElseIf Rating = "BB" And RiskCategory = "Corporate" And SDuration2 > 5 < 10 Then
    S2Test = 0.225 + (Duration - 5) * 0.025

Solution

  • And extract the commonality:-

    Function S2Test(Rating As String, RiskCategory As String, Duration As Double)   
        Dim SDuration2 As Double
        SDuration2 = WorksheetFunction.Max(1, Duration) 
        If RiskCategory = "Corporate" And SDuration2 > 5 And SDuration2 < 10 Then
            If Rating = "BBB" Then
                S2Test = 0.125 + (Duration - 5) * 0.015
            ElseIf Rating = "AAA" Then
                S2Test = 0.045 + (Duration - 5) * 0.005
            ElseIf Rating = "AA"
                S2Test = (Duration - 5) * 0.006 + 0.055
            ElseIf Rating = "A"
                S2Test = 0.07 + (Duration - 5) * 0.007
            ElseIf Rating = "BB"
                S2Test = 0.225 + (Duration - 5) * 0.025
            End If
        End If
    End Function