Function TheorMWImpliedVol(Wgt As Object, SingleVols As Object, CorrMat As Object) As Double Dim n As Long, M As Long, i As Long, j As Long Dim Tmp As Double, SumKW As Double, KW As Double, SumTmp As Double Dim w() As Double Dim v() As Double n = Wgt.Columns.Count If Wgt.Rows.Count > n Then n = Wgt.Rows.Count ReDim w(1 To n) For i = 1 To n w(i) = Wgt(i, 1) Next i Else ReDim w(1 To n) For i = 1 To n w(i) = Wgt(1, i) Next i End If M = SingleVols.Columns.Count If SingleVols.Rows.Count > M Then M = SingleVols.Rows.Count ReDim v(1 To n) For i = 1 To n v(i) = SingleVols(i, 1) Next i Else ReDim v(1 To n) For i = 1 To n v(i) = SingleVols(1, i) Next i End If If M <> n Then TheorMWImpliedVol = -100 Exit Function End If For i = 1 To n Tmp = w(i) ^ 2 * v(i) ^ 2 SumTmp = SumTmp + Tmp For j = i + 1 To M KW = w(i) * w(j) * v(i) * v(j) * CorrMat(i, j) SumKW = SumKW + KW Next j Next i TheorMWImpliedVol = (SumTmp + SumKW) ^ 0.5 End Function