0

VBA を使用して varcov マトリックスを作成しようとしていますが、この問題に対する答えを何時間も追跡しようとしても、解決できませんでした。私の問題は、以下の二重アスタリスクの各行で実行時エラー「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
4

2 に答える 2

0

Range(C6:H15) の各セルに値 1 を指定して次のコードを実行しようとしています。

Sub varcovmmult()

    Dim returns()
    Dim trans()
    Dim Excess()
    Dim MMult()

    ColCount = Range("C6:H15").Columns.Count
    RowCount = Range("C6:H15").Rows.Count

    ReDim trans(ColCount, RowCount)
    ReDim Excess(RowCount, ColCount)
    ReDim MMult(ColCount, ColCount)
    ReDim returns(ColCount)

    For j = 1 To ColCount
        returns(j) = Application.Average(Range("C6:H15").Columns(j))
        Range("c30:h30").Cells(j) = returns(j)
    Next j

    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 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

    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

    For i = 1 To ColCount
        For j = 1 To ColCount
            Range("C62").Cells(i, j) = MMult(i, j)
        Next j
    Next i

End Sub

このコードを正常に実行できました。

この範囲内のいずれかのセルの値が空白または非数値の場合、タイプの不一致というエラーが発生しました。

下付き文字が範囲外の場合は、ColCount - 1 または RowCount - 1 を使用してみてください。Cell(i, j) に適切な値が存在するかどうかを確認してください。

お役に立てれば!

ヴィベク

于 2013-03-31T07:35:14.743 に答える