• ベストアンサー

関数式でランダムに変化する数値を加算していく方法。

 初めまして、よろしくお願いします。  おそらくVBAを使うと思うのですが、G10からG100までのそれぞれのセル内に関数式によりランダムに変化する数値があります。そのそれぞれの数値が変化するたびにM10からM100への各セルへ加算されていく方法を教えて頂きたく、よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

No2 merlionXXです。 コピー範囲のミスでVBAコードの下の2行が切れていました。 再度貼り付けます。 Private Sub Worksheet_Calculate() 'イベント(計算)が行われたら自動実行するマクロ   Dim myNew, myOld '変数宣言   Dim myRng As Range   Dim i As Long   Set myRng = Range("M10:M100") '加算していくM列範囲をmyRngと定義   myNew = Range("G10:G100").Value '計算後のG列範囲を配列myNewに取り込む   On Error GoTo line 'エラー対策   With Application     .EnableEvents = False 'イベント一時停止     .Undo '入力前に戻す     myOld = Range("G10:G100").Value '計算前の列範囲を配列myOldに取り込む     .Undo '入力後に戻す     For i = 1 To 91       If myNew(i, 1) <> myOld(i, 1) Then '配列同士を比較し変化があれば         myRng(i).Value = myRng(i).Value + myNew(i, 1) 'M列に加算       End If     Next line:     .EnableEvents = True 'イベント停止を解除   End With   Set myRng = Nothing '定義解除 End Sub

kei__2000
質問者

お礼

回答ありがとうございます。丁寧な解説まで付けて頂き、大変助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

おやりになりたいことが良くわからないので以下の前提で回答します。 ・G10:G100(以下、G列と書きます)にはすべて数式が入っている。 ・G列以外のセルに入力を行う。 ・その結果、G列のどれかのセルが計算され、数値表示が変わる。 ・数値表示が変わったG列セルと同じ行のM列セルに変更後のG列の値が自動的に加算される。 これをそのままやるなら、おっしゃるようにVBAですね。 入力を行うセルを特定できればChangeイベントを使う方が簡単なのですが、ご質問からは入力セルを読み取れないのでCalculateイベントを使ってみました。 手順は以下のとおり。 1. 該当するシートのタブを右クリックして、[コードの表示]でシートモジュールを表示させます。 2. 出てきた白い所に、以下のコードを貼付けます。 '********これより下********** Private Sub Worksheet_Calculate() 'イベント(計算)が行われたら自動実行するマクロ   Dim myNew, myOld '変数宣言   Dim myRng As Range   Dim i As Long   Set myRng = Range("M10:M100") '加算していくM列範囲をmyRngと定義   myNew = Range("G10:G100").Value '計算後のG列範囲を配列myNewに取り込む   On Error GoTo line 'エラー対策   With Application     .EnableEvents = False 'イベント一時停止     .Undo '入力前に戻す     myOld = Range("G10:G100").Value '計算前の列範囲を配列myOldに取り込む     .Undo '入力後に戻す     For i = 1 To 91       If myNew(i, 1) <> myOld(i, 1) Then '配列同士を比較し変化があれば         myRng(i).Value = myRng(i).Value + myNew(i, 1) 'M列に加算       End If     Next line:     .EnableEvents = True 'イベント停止を解除   End With '********これより上********** 3.Alt+F11キーでワークシートへもどります。 これでOK

すると、全ての回答が全文表示されます。
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

一般機能だけでできます。 (私が意味を取り違えていなければですが・・) オプションの「数式」→「反復計算を行う」にチェック  *回数を1にしておきます。 M10に =M10+G10 の数式を入れ、M100まで下へフィルしておきます。

kei__2000
質問者

お礼

 回答ありがとうございます。お礼が遅れて申し訳ありません。  こちらの説明が不十分でありました。教えて頂いたやり方では確かに加算されていくのですが、変化したセル個々での加算をしていく方法を探しております。このやり方では他のセルが変化すれば、変化していないセルの値まで再び加算されてしまいました。  

すると、全ての回答が全文表示されます。

関連するQ&A