我正在嘗試使用VBA創建varcov矩陣,但儘管試圖追蹤此問題的答案的小時數已無法解決。我的問題是,我不斷收到運行時錯誤「9」在每個以下雙帶星號線:運行時錯誤'9':在創建矩陣時下標超出範圍
Sub varcovmmult()
Dim returns()
Dim trans()
Dim Excess()
Dim MMult()
ReDim trans(ColCount, RowCount)
ReDim Excess(RowCount, ColCount)
ReDim MMult(ColCount, ColCount)
ReDim returns(ColCount)
'Calculate mean, trans and excess arrays for dimensionalisation
'For mean:
ColCount = Range("C6:H15").Columns.Count
RowCount = Range("C6:H15").Rows.Count
For j = 1 To ColCount
**returns(j) = Application.Average(Range("C6:H15").Columns(j))
Range("c30:h30").Cells(j) = returns(j)**
Next j
'For excess:
For j = 1 To ColCount
For i = 1 To RowCount
**Excess(i, j) = Range("c6:h15").Cells(i, j) - returns(j)
Range("C36:H45").Cells(i, j) = Excess(i, j)**
Next i
Next j
'For tranpose:
For j = 1 To ColCount
For i = 1 To RowCount
**trans(j, i) = Range("C36:H45").Cells(i, j)
Range("C51:L56").Cells(j, i) = trans(j, i)**
Next i
Next j
'inject values into product array
For i = 1 To ColCount
For j = 1 To ColCount
For k = 1 To RowCount
**MMult(i, j) = MMult(i, j) + trans(i, k) * Excess(k, j)**
Next k
Next j
Next i
'output product array values into varcov matrix and divide by n.years
For i = 1 To ColCount
For j = 1 To ColCount
**Range("C62").Cells(i, j) = MMult(i, j)**
Next j
Next i
End Sub
非常感謝你們的幫助。還產生了兩個額外的問題:進行更改並運行程序後,仍顯示相同的錯誤。但是,當我按'結束'而不是'調試',然後再次運行程序,它的工作。爲什麼按'結束'允許它工作?另外,爲什麼錯誤在雙星號而不是ReDim條目中出現中斷,而Excel的數組參數變量未知? –
@LukeDenham,很好,它爲你工作。不知道爲什麼按結束工作。它可能已經清除了以前的運行狀態(不確定,只是瘋狂的猜測)。 –
@LukeDenham爲你的第二個問題,當ReDim被調用時沒有初始化,VBA創建了計數器變量並用0初始化它們。注意,在頂部沒有定義Option Explicit。在VB/A代碼中使用'Option Explicit'是一種很好的做法,它不允許程序在沒有適當的變量聲明的情況下運行。請接受其他訪客輕鬆的答案。 –