はじめまして、以前に教えて!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!"を返します
どうのようにしたらよいのでしょうか?
No.1ベストアンサー
- 回答日時:
>Range("A1") には"119.085714285714"が出力されます
しょっぱなの
Dim y(6) As Double
Dim x(6) As Double
により,配列がゼロから宣言されているため,
x:{0,1,2,3,4,5,6}
y:{0, 92.87, 92.55, …, 92.59}
の7要素の配列からTREND関数を計算しています。
Option Base 1
を宣言して配列を1から開始するようにするか,若しくは
Dim y(1 To 6) As Double
Dim x(1 To 6) As Double
に直して実行します。
#参考
Excel2002以前のバージョンのエクセルでは,TREND関数の内部的な計算の元になっているLINEST関数にバグがあるため,可能な限りExcel2003以降をご利用ください。
soul_surferです
早速のアドバイス、ありがとうございます
教えて頂いた通りに変更し、実行しましたら希望の演算結果が得られました。
また、Excel2003以降に変更したいと思います
ありがとうございました
No.2
- 回答日時:
この質問は長いが、質問の要点を箇条書きにでもして表現を工夫してほしい。
すでにわかる人がいて、回答も出ているが、それに甘えないで。
2つろんてんが書いてあるようだ
(1)2つのプログラムの結果が合わない
(2)その他
>取り出した配列(値は固定ではないのです)をどうのようにArray(1, 2, 3, 4, 5, 6)またはArray(x(1), x(2), x(3), x(4), x(5), x(6))等の形にしたら良いか分かりません
プログラムの実行中の結果はあえてArray(・・・)
にしなくてもよいのではないかな。普通の配列にためて行けばよい。
そういう方法(Arrayにする形)があれば、私も教わりたい。
エクセルの場合には
Sub test01()
Range("a1:D1") = Array(1, 2, 3, 4)
End Sub
のようなのができて、1行ですむ。
しかし
Sub test02()
Dim h(4)
h(0) = 0: h(1) = 1: h(2) = 2: h(3) = 3
Range("a1:D1") = h()
End Sub
のようなのもできるようだ。
ーー
Sub test03()
a = "0,1,2,3"
Range("a1:D1") = Array(a)
End Sub
は結果が違う。
Sub test04()
Range("a1:D1") = 1
End Sub
と同じタイプになる。
ーー
これらを認識してコードを考えてみたら。
また配列の加減が0であることを注意すべにです。
Option Base 1を宣言しないと0どぇす。
ーー
Application.Trendはうまくいきましたか。
Application.Worksheetfunction.Trend
.Worksheetfunction.Trend
式でやってきたが。
soul surferです
ご回答ありがとうございます
ご連絡が遅くなりました
>この質問は長いが、質問の要点を箇条書きにでもして表現を工夫してほしい。
>すでにわかる人がいて、回答も出ているが、それに甘えないで。
たしかにそうでした、どこまで記述すれば、アドバイスして頂く方に理解してもらえるのか
分からず長いコードを記入してしまいました。
すみません。以後、気を付けます。
>Range("a1:D1") = Array(1, 2, 3, 4)
上記のArray等にこだわったのは一度エクセルで演算結果を分析してみて、その後、
サーブレット+SQL等に考え方を反映させたかったのでRange("a1:D1")等のエクセル固有のコード
はなるべく避けたかったのです。とは言え、そもそもtrend関数なるものが現時点のSQLに用意せれているかどうかは、まだ不明ですが。。。
今回の演算結果の差異は私の配列の宣言方法のミスであることが、
皆様のご指摘により判明しましたのでArrayにこだわらずにすみました。ありがとうございます
また、ご指摘のtest01()からtest04()の記述は今後の考え方に大変参考になりました。
ありがとうございます
今後とも、ご指導の程、宜しくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
【お題】 ・ありそうだけど、絶対に無いことわざを教えてください。
-
前回の年越しの瞬間、何してた?
いよいよ2025年がやってきますね。 年越しのスタイルは人それぞれ。 2024年を迎える瞬間は何をしていましたか?
-
2024年においていきたいもの
2024年もあとわずかですが、いま抱えているもので「これは来年にもっていきたくないなぁ」というものを教えて下さい。
-
Excel VBA TREND関数について
Access(アクセス)
-
EXCEL97VBAにおける、TREND(ワークシート関数)の配列入力は?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
ListViewで、非表示列って作れ...
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
配列変数の添字が範囲外ですと...
-
MATLABにて場合分け関数を定義...
-
ヤマ括弧でくくられたテキスト...
-
3次元配列の記述
-
Excel-VBAの配列「Public Const...
-
エクセルで最小値から0を除く方法
-
VBA Match関数の限界
-
【EXCEL】条件+上位○位までを...
-
配列の結合?について
-
Excel マクロ VBA プロシー...
-
エクセルで特定の列が0表示の場...
-
UWLSの記録でマクロを作成し使...
-
ある1人の友達のLINEで、少しの...
-
教えて下さい
-
UserForm1.Showでエラーになり...
-
mailstorehomeのエクスポートで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
配列変数の添字が範囲外ですと...
-
VB6 配列を初期化したい
-
VBA 1次元配列を2次元に追加する
-
ListViewで、非表示列って作れ...
-
2次元動的配列の第一引数のみを...
-
for each の現在の配列ポインタ...
-
特定のセル範囲で4文字以上入力...
-
subの配列引数をoptionalで使う...
-
配列を任意の数値で埋める方法
-
VBのFunctionで、配列を引数...
-
verilogで配列の任意の8bitを取...
-
Excel-VBAの配列「Public Const...
-
配列に同じ値を入れる方法
-
VBAで近似曲線の係数取得
-
linest関数に配列を渡す
-
Excel VBA配列をFunctionに渡す
-
MATLABにて場合分け関数を定義...
-
シェルスクリプト中で、ヒアド...
おすすめ情報