| 
    
     |  | こんばんは。 
 >転記したい場合のコードの記入方法を教えてください。
 >VBA初心者です。エクセル2003を使用しています。
 
 プログラミングの要でもある繰り返しを司るステートメントを
 調べてください。
 
 Do 〜 Loop 文 と
 For 〜 Next文  があります。
 
 今回は、繰り返し処理の理解が目的ですから、
 
 Do〜Loop文を取り上げます。
 
 
 >記載しているコード
 >1.worksheets("表").Range("C5").Value=worksheets("データー").Range("A2")
 > worksheets("表").Range("C7").Value=worksheets("データー").Range("A3")
 > worksheets("表").Range("C9").Value=worksheets("データー").Range("A4")
 >以下続く
 > worksheets("表").Range("C91").Value=worksheets("データー").Range("A45")
 > worksheets("表").Range("C93").Value=worksheets("データー").Range("A46")
 >
 >2.worksheets("表").Range("O5:AI5").Value=worksheets("データー").Range("B2:AF2")
 > worksheets("表").Range("O7:AI7").Value=worksheets("データー").Range("B3:AF3")
 > worksheets("表").Range("O9:AI9").Value=worksheets("データー").Range("B4:AF4")
 >以下続く
 > worksheets("表").Range("O91:AI91").Value=worksheets("データー").Range("B45:AF45")
 > worksheets("表").Range("O93:AI93").Value=worksheets("データー").Range("B46:AF46")
 
 上記のコード1,2を見ると、シート「データー」の各セルの行とシート「表」のセルの行が違っていること以外は、各コードは同じですよね?
 そうすると、行番号を規則に従い変化させれば、繰り返し処理が使えそうなのです。
 
 worksheets("表").Range("C5").Value=worksheets("データー").Range("A2")
 worksheets("表").Range("C7").Value=worksheets("データー").Range("A3")
 データーのA列行番号が1ずつ増え、表のC列行番号が2ずつ増えている。
 この規則が利用できないか? を考えます。
 今、シート「データー」のA列の行を変数gyoを使って変化させることを考えます。
 
 標準モジュールに
 
 
 Sub test1()
 Dim gyo As Long
 gyo = 2 'データーのA列行の始まりは、2 ですよね?
 Do
 Range("A1").Value = gyo
 Loop
 End Sub
 
 
 今、変数gyoの内容がわかりやすいようにアクティブなシートのA1に表示するようにしています。
 
 
 test1を実行してください。
 
 セルA1 は、2が表示されっぱなしでカーソルは、砂時計状態、プログラムは、終わる気配がありません。
 Do 〜 Loopは、この間に書かれたプログラムを延々繰り返します。
 
 gyoという変数は、最初に2が設定されただけで、
 
 セルA1にその値をいれる を繰り返してるだけです。
 
 これでは、繰り返し処理をさせる意味がありません。
 
 ESCキーを押してプログラムを強制終了させてください。
 中断したという趣旨のメッセージが表示されますから、「終了」をクリックしてください。
 
 
 Do〜Loop
 
 内でgyoと言う変数を変化させなければなりません。
 ここでは、
 
 gyo=gyo+1というコードを入れてgyoという変数を1ずつ増やしてみます。
 
 
 Sub test2()
 Dim gyo As Long
 gyo = 2
 Do
 Range("A1").Value = gyo
 gyo = gyo + 1
 Loop
 End Sub
 
 
 test2を実行してみてください。
 
 変数gyoの中身を示すセルA1は、どんどん増えていますね?
 でも、おいおい増えすぎだよ!!
 データーのA列データは46行まででいいんだよ!!
 ダメダどんどん増えていってしまう。
 
 仕方がないですね、また、
 
 ESCキーを押してプログラムを強制終了させてください。
 中断したという趣旨のメッセージが表示されますから、「終了」をクリックしてください。
 
 繰り返し処理を抜ける条件が必要ですね!!
 繰り返すのは、gyoが46まででよいのですよね!!
 
 
 Sub test3()
 Dim gyo As Long
 gyo = 2
 Do While gyo <= 46
 Range("a1").Value = gyo
 Application.Wait [now()] + [timevalue("00:00:00.30")]
 gyo = gyo + 1
 Loop
 End Sub
 
 このように Do の後に繰り返しの条件を記述できます。
 
 Do While gyo <= 46
 
 変数gyoが、46以下の場合、繰り返し処理を続ける、46を越えたら、繰り返し処理を
 抜ける という意味です。
 
 尚、Application.Wait [now()] + [timevalue("00:00:00.30")]は、
 処理速度を遅くし、セルA1の値の変化を分かりやすくするために
 入れています。本来は,速い方が良いのですから、要りませんね!!
 
 これで シート「データー」のA列の行変化は、Do〜Loopを使って実現できました。
 
 
 今度は、シート「データー」のA列の行と シート「表」のC列の行との間に
 ある規則性を考えます、
 
 
 データーのA列の行       表のC列の行
 2              5
 3              7
 4              9
 5             11
 
 
 (シート「データー」のA列の行)×2+1=シート「表」のC列の行
 という規則性が見えてきませんか?
 
 これを関係を利用すると
 
 
 Sub test4()
 Dim gyo As Long
 gyo = 2
 Do While gyo <= 46
 Range("a1").Value = gyo
 Range("b1").Value = gyo * 2 + 1
 Application.Wait [now()] + [timevalue("00:00:00.30")]
 gyo = gyo + 1
 Loop
 End Sub
 
 セルA1にシート「データー」のA列の行
 セルB1にシート「表」のC列の行
 
 が順次、表示されます。
 
 
 変数gyo(シート「データー」のA列の行)から、シート「表」のC列の行まで
 求められますから、これを使えば、 Do〜Loopを使った
 繰り返し処理が実現できると思います。
 
 
 |  |