|
こんばんは。
>転記したい場合のコードの記入方法を教えてください。
>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を使った
繰り返し処理が実現できると思います。
|
|