Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


62770 / 76732 ←次へ | 前へ→

【18563】Re:数値計算について
回答  ichinose  - 04/9/29(水) 19:11 -

引用なし
パスワード
   ▼ジュン さん:
こんばんは。

>例えば,Tn=Σ(i=1⇒n)Wi×Tn-i という数値計算をexcelで行いたいとき,
>初期条件として,
>T0=0
>Wi:i=1〜nのときの値(既知)
>が与えられたときのTnの値を求めたいのですが,
>
>1.T1を求めるとき,T1=W1×T0
>2.T2を求めるとき,T2=W1×T1+W2×T0
>3.Tnを求めるとき,Tn=W1×Tn-1+W2×Tn-2+・・・
>となっていきますよね。nの値が小さければ問題ないのですが,
>nが100以上とかになると,Wi×Tn-1をうまく表現することができません。
>どういう式をたてればよいでしょうか
VBAで良いんですよね?
W1〜Wnは、アクティブシートのセルA1〜Anに想定値を乱数で発生させた例です。

'================================================================
Sub test()
  Dim n As Long
  n = 100 '←この値を変更して確認してみて下さい
  With Range("a1:a" & n)
   .Formula = "=int(rand()*" & n & ")+1"
   .Value = .Value
   End With
 MsgBox tn(n, 2)
End Sub
'=============================================================
Function tn(n As Long, t0 As Long) As Double
'Tn=Σ(i=1⇒n)Wi×Tn-iを計算する
'input : n 求めたい数列値、t0--初期値
'output: tn 結果
  Dim idx As Long
  Dim jdx As Long
  ReDim ans(n) As Double
  ans(0) = t0
  For idx = 1 To n
   ans(idx) = 0
   For jdx = idx - 1 To 0 Step -1
    ans(idx) = ans(idx) + Range("a" & (idx - jdx)).Value * ans(jdx)
    Next
   Next
  tn = ans(UBound(ans()))
End Function

ただ、値がかなり大きくなるので有効桁数をオーバーしてしまいますね!!
まずは、nに小さい数字を指定して確認してみて下さい。

0 hits

【18561】数値計算について ジュン 04/9/29(水) 16:55 質問
【18563】Re:数値計算について ichinose 04/9/29(水) 19:11 回答
【18570】Re:数値計算について(一箇所訂正) ichinose 04/9/29(水) 22:39 発言
【18573】Re:数値計算について ジュン 04/9/29(水) 23:10 お礼
【18577】Re:数値計算についての質問2 ジュン 04/9/30(木) 2:19 質問
【18579】Re:数値計算についての質問2 ichinose 04/9/30(木) 7:39 発言
【18582】Re:数値計算についての質問2 ジュン 04/9/30(木) 8:47 お礼
【18587】数値計算についての質問3 ジュン 04/9/30(木) 15:09 質問
【18595】Re:数値計算についての質問3 ichinose 04/9/30(木) 21:09 発言
【18644】Re:数値計算についての質問3 ジュン 04/10/2(土) 21:11 お礼

62770 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free