VBA에서 일부 행렬 곱셈을 시도하지만 오류가 계속 발생합니다. 모든 벡터 및 행렬을 정의하고 한 번에 한 번씩 계산을 시도했지만 = MMult 함수가 올바르게 작동하는 것처럼 보입니다. 그러나 SumProduct를 사용할 때 반환되는 값은 0입니다.VBA : Sumproductc에서 빈 값 반환 (행렬 곱셈)
이것은 내입니다. 이 하위에 대한 코드 (I는 일부 서식을 떠 났어요) :
Excel에서Sub StockAnalysis()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Stocks As Integer
Dim TableStart As Integer
Dim TableEnd As Integer
Dim CorrTableStart
Dim CovTableStart As Integer
Dim InvCovTableStart As Integer
Dim AuxiliaryA As Integer
Dim AuxiliaryB As Integer
Dim AuxiliaryC As Integer
Dim AuxiliaryD As Integer
'Count the amount of stocks
Stocks = 0
For i = 1 To 20
If Worksheets("MainSheet").Cells(i + 2, 2) <> 0 Then
Stocks = Stocks + 1
Else
Stocks = Stocks
End If
Next
'Deleting previous TempSheet
For Each Worksheet In Application.ActiveWorkbook.Worksheets
If Worksheet.Name = "TempSheet" Then
Worksheet.Delete
End If
Next
'Defining start and end points of the tables
TableStart = Stocks + 3
TableEnd = TableStart + Stocks
CorrTableStart = 9
CovTableStart = CorrTableStart + Stocks + 2
InvCovTableStart = 13 + (Stocks * 2)
RiskFreeRateStart = InvCovTableStart + 2 + Stocks
'Transposing Means are creating One Vector
ActiveWorkbook.Sheets.Add.Name = "TempSheet"
Worksheets("TempSheet").Visible = xlSheetHidden
Worksheets("TempSheet").Cells(1, 1) = "Stocks"
Worksheets("TempSheet").Cells(1, 2) = "Mean"
Worksheets("TempSheet").Cells(1, 3) = "Vector"
For j = 1 To Stocks
Symbol = Worksheets("All stocks").Cells(1, 1 + j)
Worksheets("TempSheet").Cells(j + 1, 1) = Symbol
Mean = Worksheets("All stocks").Cells(2, TableStart + j)
Worksheets("TempSheet").Cells(j + 1, 2) = Mean
Worksheets("TempSheet").Cells(j + 1, 3) = 1
Next
'--------------------Calculations--------------------
MeanVector = Worksheets("TempSheet").Range(Cells(2, 2), Cells(1 + Stocks, 2))
OneVector = Worksheets("TempSheet").Range(Cells(2, 3), Cells(1 + Stocks, 3))
ReDim MatrixInvCov(1 To Stocks, 1 To Stocks)
For i = 1 To Stocks
For j = 1 To Stocks
MatrixInvCov(i, j) = Worksheets("All stocks") _
.Cells(InvCovTableStart + i, TableStart + j).Value
Next
Next
AuxiliaryMeanMM = Application.WorksheetFunction.MMult(MatrixInvCov, MeanVector)
AuxiliaryOneMM = Application.WorksheetFunction.MMult(MatrixInvCov, OneVector)
AuxiliaryA = Application.WorksheetFunction.SumProduct(MeanVector, AuxiliaryMeanMM)
AuxiliaryB = Application.WorksheetFunction.SumProduct(MeanVector, AuxiliaryMeanMM)
AuxiliaryC = Application.WorksheetFunction.SumProduct(MeanVector, AuxiliaryOneMM)
AuxiliaryD = AuxiliaryA - AuxiliaryC - AuxiliaryB^2
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
"A"다음과 같이 기록 될 것입니다 :
= SUMPRODUCT (MeanVector, MMULT (MatrixInvCov, MeanVector))
행렬 및 벡터의 크기는 정확합니다. MatrixInvCov가 [3x3] 행렬 인 동안 AuxiliaryOneMM, AuxiliaryMeanMM, MeanVector 및 OneVectore는 [3x1]입니다.
다음은 지역 창에 대한 그림입니다. 벡터 및 행렬은 정확하지만 A, B, C 및 필요한 경우 D는 모두 0
TempSheet의 사진 및 모든 주식은 다음과 같습니다
감사합니다 당신이 아주 많이,이 문제를 해결했다! 변수의 밝기조차 살펴 보지 않았습니다. 나는이 부분을 조금 읽어야 할 필요가 있다고 생각한다. –