別の UDF への引数として記述した UDF から得られる配列の使用に苦労しています。
関数は #value エラーを返します。
問題がどこにあるのかわかりません。
以下はコードです。
どんな助け/アドバイスも大歓迎です;)
これは動作します..
Function fTA_GetSMA(ByRef varData As Variant, ByRef lPeriod As Long) As Variant
' This function computes a simple moving average over a defined period.
Dim l As Long
Dim dSum As Double
Dim var() As Variant
Application.Volatile
varData = varData.Value2
ReDim var(LBound(varData, 1) To UBound(varData, 1), 1)
For l = LBound(varData, 1) To UBound(varData, 1)
If l < lPeriod Then
dSum = dSum + varData(l, 1)
ElseIf l = lPeriod Then
dSum = dSum + varData(l, 1)
var(l, 1) = dSum / lPeriod
ElseIf l > lPeriod Then
dSum = dSum + varData(l, 1) - varData(l - lPeriod, 1)
var(l, 1) = dSum / lPeriod
End If
Next l
fTA_GetSMA = var
終了機能
これも機能します。
Function fTA_GetTR(ByRef varData As Variant) As Variant ' この関数は、金融時系列の真の範囲を計算します。' 入力データは、O、H、L、C を含む行列でなければなりません。
Dim var() As Variant
Dim l As Long
Dim dMaxTR As Double
Dim dMinTR As Double
Application.Volatile
varData = varData.Value2
ReDim var(LBound(varData, 1) To UBound(varData, 1), 1)
For l = LBound(varData, 1) To UBound(varData, 1)
If l = 1 Then
dMinTR = varData(l, 3)
dMaxTR = varData(l, 2)
ElseIf l > 1 Then
dMaxTR = Application.WorksheetFunction.Max(varData(l, 2), varData(l - 1, 4))
dMinTR = Application.WorksheetFunction.Min(varData(l, 3), varData(l - 1, 4))
End If
var(l, 1) = dMaxTR - dMinTR
Next l
fTA_GetTR = var
終了機能
これは機能していないものです..
Function fTA_GetATR(ByRef varData As Variant, ByRef lPeriod As Long) As Variant ' この関数は、指定された期間数にわたる金融時系列の平均真範囲を計算します。' 入力データは、O、H、L、C を含む行列でなければなりません。 ' 平均式は SMA です
Dim var() As Variant
Dim varATR() As Variant
ReDim var(LBound(varData, 1) To UBound(varData, 1), 1)
ReDim varATR(LBound(varData, 1) To UBound(varData, 1), 1)
var = fTA_GetTR(varData)
varATR = fTA_GetSMA(var, lPeriod)
Debug.Print varATR
fTA_GetATR = varATR
終了機能