Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9680 / 76736 ←次へ | 前へ→

【72615】Re:転記のコード
発言  ichinose  - 12/8/28(火) 21:49 -

引用なし
パスワード
   こんばんは。

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

0 hits

【72597】転記のコード yui 12/8/27(月) 21:59 質問
【72604】Re:転記のコード ドカ 12/8/28(火) 10:11 回答
【72616】Re:転記のコード yui 12/8/28(火) 22:17 お礼
【72615】Re:転記のコード ichinose 12/8/28(火) 21:49 発言
【72617】Re:転記のコード yui 12/8/28(火) 22:35 お礼

9680 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free