Excel VBA TREND関数について
はじめまして、以前に教えて!gooに同じ質問が掲載されており、参考にさせて頂いたのですが
演算結果に違いが出てしまい原因がわかりません。どなたかアドバイスいただけませんか?
私の環境
winXP sp3
office2000
----------------------------------------------------------------------------------
以前の回答(1)
Sub Trend_Test()
Dim y(10) As Double '既知のy
Dim x(10) As Double '既知のx
Dim newX As Double '新しいx
'配列y()、x()に値を代入
y(1) = 100: x(1) = 1
y(2) = 200: x(2) = 2
y(3) = 300: x(3) = 3
y(4) = 400: x(4) = 4
y(5) = 500: x(5) = 5
y(6) = 600: x(6) = 6
y(7) = 700: x(7) = 7
y(8) = 800: x(8) = 8
y(9) = 900.1: x(9) = 9
'新しいx(例)
newX = 5.5
'試しに計算結果を出力
Range("A1") = Application.Trend(y, x, newX, True)
Range("A2") = Application.Trend(y, x, newX + 1, True)
Range("A3") = Application.Trend(y, x, newX + 2, True)
End Sub
----------------------------------------------------------------------------------
以前の回答(2)
Sub TEST_Trend()
Dim x As Variant
Dim y As Variant
Dim NEWx As Double
x = Array(0.005479452, 0.019178082, 0.038356164, 0.082191781, 0.167123288 _
, 0.252054795, 0.328767123, 0.41369863, 0.495890411, 0.580821918, 0.663013699 _
, 0.747945205, 0.832876712, 0.915068493, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20)
y = Array(0.055, 0.055, 0.057, 0.064, 0.086, 0.086, 0.087, 0.096 _
, 0.099, 0.1, 0.1, 0.1, 0.01, 0.103, 0.106, 0.15, 0.233 _
, 0.347, 0.483, 0.64, 0.817, 0.995, 1.163, 1.31, 1.545, 1.797, 2.07)
NEWx = 0.05
Dim i As Integer
For i = 1 To 20
Cells(i, 1) = Application.Trend(y, x, NEWx + i - 1, True)
Next i
End Sub
----------------------------------------------------------------------------------
今回の検証
Dim y(6) As Double
Dim x(6) As Double
Dim newX As Double
Dim YY As Variant
Dim XX As Variant
newX=7
y(1) = 92.87: x(1) = 1
y(2) = 92.55: x(2) = 2
y(3) = 91.64: x(3) = 3
y(4) = 92.3: x(4) = 4
y(5) = 93.29: x(5) = 5
y(6) = 92.59: x(6) = 6
Range("A1") = Application.trend(y, x, newX, True)
Range("A1") には"119.085714285714"が出力されます
XX = Array(1, 2, 3, 4, 5, 6)
YY = Array(92.87, 92.55, 91.64, 92.3, 93.29, 92.59)
または
XX = Array(x(1), x(2), x(3), x(4), x(5), x(6))
YY = Array(y(1), y(2), y(3), y(4), y(5), y(6))
Range("B1") = Application.trend(YY, XX, newX, True)
Range("B1") には"92.688"が出力されます
ワークシート上でtrend関数を実行すると
"92.688"を返しますので
Arrayを使用した値と同じです
ここで問題がありまして
Do...Loop等でx(1)~x(6), y(1)~y(6)の値を取り出しています
取り出した配列(値は固定ではないのです)をどうのように
Array(1, 2, 3, 4, 5, 6)
または
Array(x(1), x(2), x(3), x(4), x(5), x(6))
等の形にしたら良いか分かりません
たとえば
Dim a as String
Dim b as String
a="1, 2, 3, 4, 5, 6"
b = "92.87, 92.55, 91.64, 92.3, 93.29, 92.59"
XX = Array(a)
YY = Array(b)
また、
Dim a As Variant
Dim b As Variant
a="1, 2, 3, 4, 5, 6"
b = "92.87, 92.55, 91.64, 92.3, 93.29, 92.59"
XX = Array(a)
YY = Array(b)
Range("D1") = Application.trend(YY, XX, newX, True)
演算結果は"#VALUE!"を返します
どうのようにしたらよいのでしょうか?
お礼
なるほど、わかりました。FalseからTrue,TrueからFalseにの条件見極めが必要なわけですね。もっと試して理解できるようになりたいと思います。