こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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の変数の結果が全て同じになって
しまいました。
どの部分が不適切でしょうか。

是非ともアドバイスをお願い致します。

投稿日時 - 2009-08-19 20:24:27

QNo.5220472

暇なときに回答ください

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

上記コードを実行したところ、シート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に値を上書きしているのです。

どういう結果になってほしいのかわからないので、直し方もよくわかりません。

というか、カテゴリがかなり違う気がします・・・
プログラム関係のカテゴリで聞いたほうが良いと思います。

投稿日時 - 2009-08-19 21:27:12

お礼

ご回答有り難う御座います。

ご指摘の点、気づきませんでした。
ありがとうございました。

カテゴリを変えて再度質問させて頂きたいと思います。

投稿日時 - 2009-08-20 06:04:39

あなたにオススメの質問