- 締切済み
Excel VBAのFor...Next ステートメントについて
大学での研究に使うシミュレーション・プログラムのひな形を作成して おりまして、不明な点が出てしまったので質問させて頂きます。 シートを4つ使うシミュレーションで、シート1のA1に変数(0.5から2まで、0.05ずつ)を挿入し、 シート2のA1で計算、シート3のA1で集計・計算、 シート4のA1にそれぞれの変数を挿入した結果を縦方向に記入したいと 考えております。 VBAはまだ習い始めたばかりなので、かなり下手くそですが、なんとか コードを書いてみました。 Sub macro1() '画面更新停止 Application.ScreenUpdating = False '自動計算停止 ActiveSheet.EnableCalculation = False Dim sheet1 As Worksheet Set sheet1 = Worksheets(1) 'シート1をアクティブにする Sheet1.Activate '変数を宣言する For i = 0.5 To 2 Step 0.05 For j = 1 To 30 'シート1のパラメータの値(A1)を0.5から2まで 0.05 刻みで変化させる Sheet3.Cells(1, 1).Value = i '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート2をアクティブにする Sheet2.Activate '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート3をアクティブにする sheet1.Activate '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート3(A1)の値をシート4のA列のj列目にコピー&ペースト sheet1.Range("A1").Value = Sheet4.Range("A" & j).Value Next Next End Sub このコードを実行してもシート4の変数の結果が全て同じになって しまいました。 どの部分が不適切でしょうか。 是非ともアドバイスをお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- shu_5252
- ベストアンサー率60% (29/48)
上記コードを実行したところ、シート4には何も表示されません。 変なところ1 --------- 'シート3をアクティブにする sheet1.Activate ↑シート1がアクティブになってます。 変なところ2 ----------- 'シート3(A1)の値をシート4のA列のj列目にコピー&ペースト sheet1.Range("A1").Value = Sheet4.Range("A" & j).Value ↑左右が逆&シート1になってます。 コメントどおりにしたいのであれば、↓のようになります。 Sheet4.Range("A" & j).Value = Sheet3.Range("A1").Value これで「このコードを実行してもシート4の変数の結果が全て同じになってしまう」という状態になります。 シート4に同じ結果が縦に表示されるのは当然です。 Jループの間は Sheet3.Range("A1").Value の値はずっと一緒だからです。 つまりこのプログラムでは、シート4のA1~A30すべてに0.5をセット、 次にシート4のA1~A30すべてに0.55をセット・・・ と何回もシート4のA1~A30に値を上書きしているのです。 どういう結果になってほしいのかわからないので、直し方もよくわかりません。 というか、カテゴリがかなり違う気がします・・・ プログラム関係のカテゴリで聞いたほうが良いと思います。
お礼
ご回答有り難う御座います。 ご指摘の点、気づきませんでした。 ありがとうございました。 カテゴリを変えて再度質問させて頂きたいと思います。