OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

EXCEL97VBAにおける、TREND(ワークシート関数)の配列入力は?

  • すぐに回答を!
  • 質問No.173186
  • 閲覧数148
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 88% (40/45)

EXCEL97のワークシートでファイルを作成したのですが、データ数が膨大で動かない(計算終了まで時間がかかりすぎる)ため、ワークシート関数の代わりに、VBAのSub~End Subを作成し、計算結果(式ではなく数値)のみをセルに貼り付ける作業を行っています。

ワークシート関数のTRENDを使用しているのですが、これをVBA上で使用するためにどう入力すれば良いかわかりませんので、ご教授いただきたいと思います。

myCELL=Application.TREND(既知のy, 既知のx, 新しいx, 定数)

でmyCELLを計算させたいのですが、
配列の既知のyおよび既知のxがどのように入力すれば良いか判りません。
この数値をセル上において、例えばA1:A10、B1:B10という形にすることは
できますが、求めていますのは
X1,X2~X10 Y1,Y2~Y10の変数がVBAのプログラム上にある場合の配列の入力
(数値取込?)を教えていただきたいと思います。

TREND関数はVBAでも使用できる関数となっていますが、
私の求めるやり方は不可能である場合もその旨をお教えください。

よろしくお願い申し上げます。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

VBA内でTrendを使ってみました。らしき答えは出ました。
参考になる?(Excel97がないため、Excel2000で確認しています)

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
補足コメント
yohsshi

お礼率 88% (40/45)

このプロシージャーはExcel97でも動作いたしました。
入力形式はこれであっているはずなのですが、
私の計算方式にアレンジすると、ERROR2015で
計算できなく苦しんでいます。

もう少し考えてみます。ありがとうございます。
投稿日時 - 2001-11-23 21:48:28
お礼コメント
yohsshi

お礼率 88% (40/45)

色々調べた結果、以下のような形にするとエラーが出なくなりました。

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

Array関数を使用することで、エラーが出なくなりました。
できるということがわかったので、あきらめず考えることができました。
ありがとうございました。
投稿日時 - 2001-11-24 10:17:20
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ