私は、一部のデータ、特に2列(2x2行列)の共分散行列を生成するコードを作成しています。何が起こっているのかは、コードが完全に前に働いていたことであり、今は大きな変更なしに(単に関数を使って)変更されることはありません。コードが実行され、MsgBoxが表示され、行列を計算する必要があるときは、すべての行をスキップするだけで終了します。エラーなしでVBAコードをスキップする
コード:
Function GetBaseRate(ranges() As Variant, Days() As Variant) As Object
' Get Data from Data Base
' Use this array to render the bucket titles
Dim Covariance As Object
Dim Cov As Variant
Set Covariance = CreateObject("Scripting.Dictionary")
Set sh = ThisWorkbook.Worksheets("AUX")
' Get Covariance for each range
limit = UBound(ranges)
MsgBox limit
For i = 0 To limit
MsgBox ranges(i) & " - " & Days(i)
Next i
For i = 0 To limit
sh.UsedRange.ClearContents
' query for each day
MsgBox ranges(i) & " - " & Days(i)
Query = "SELECT TASA FROM [NVSSQLBI].[MESA].[dbo].[CURVA_BASE_CLP_ON_FECHA] WHERE DIAS ='" & Days(i) & "' AND FECHA > '" & DateAdd("yyyy", -5, Date) & "' ORDER BY FECHA DESC"
Query2 = "SELECT TASA FROM [NVSSQLBI].[MESA].[dbo].[CURVA_BASE_CLF_ON_FECHA] WHERE DIAS ='" & Days(i) & "' AND FECHA > '" & DateAdd("yyyy", -5, Date) & "' ORDER BY FECHA DESC"
aux = BDconexion2(Query)
aux2 = BDconexion2(Query2)
Count = 1
' CLP
For Each element In aux
sh.Cells(Count, 1).Value = element
Count = Count + 1
Next element
Count = 1
' UF
For Each element In aux2
sh.Cells(Count, 2).Value = element
Count = Count + 1
Next element
' Generate Cov
Cov = VarCov(Range("A1:B" & Count - 1))
'Debug.Print Cov(0, 0) & " - "
Covariance.Add CStr(ranges(i)), Cov
Next i
GetBaseRate = Covariance
End Function
これは、データベースへのSQLクエリを作成し、それが共分散行列年代の後の計算のためのワークシートにデータを置きます。 行列を計算コードはこの1つである:
Function VarCov(rng As Range) As Variant
' Returns covariance matrix
Dim i As Integer
Dim j As Integer
Dim colnum As Integer
Dim Matrix() As Double
colnum = rng.columns.Count
ReDim Matrix(colnum, colnum)
For i = 1 To colnum
For j = 1 To colnum
Matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.columns(i), rng.columns(j))
Next j
Next i
VarCov = Matrix
End Function
私はそれが動作しない理由はわかりません、私は、以前のバージョンで働いているとそれは全く失敗しません。 デバッグした後、失敗ポイントは完璧に動作するために使用
Matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.columns(i), rng.columns(j))
ラインに位置し、今ではすべてのエラーをスローしないだけで
(MsgBoxには、「完了」という)関数の後の行に行きます
が解決!ありがとうございました –