Excel VBA質問箱 IV

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

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


7068 / 13646 ツリー ←次へ | 前へ→

【41393】Do〜Loopについて ToShiYo 06/8/8(火) 22:12 質問[未読]
【41395】Re:Do〜Loopについて へっぽこ 06/8/8(火) 23:37 発言[未読]
【41396】Re:Do〜Loopについて ichinose 06/8/8(火) 23:47 発言[未読]
【41405】Re:Do〜Loopについて だるま 06/8/9(水) 9:39 回答[未読]

【41393】Do〜Loopについて
質問  ToShiYo  - 06/8/8(火) 22:12 -

引用なし
パスワード
   たとえば

Do While ActiveCell <> ""・・・Loop

Do・・・Loop While activeCell<>""
の違いについて

ループの初めで条件判断させることは理解できますが
ループの後で条件判定させなければならないようなケースは
どのようなことなのでしょうか。
そのような具体的な例はあるのでしょうか?

【41395】Re:Do〜Loopについて
発言  へっぽこ  - 06/8/8(火) 23:37 -

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

パッと具体的なものは出ないですが、
まずは1つ処理してみないと抜けていいのか、くるくると続けないといけないのか
判断が付かない様なケースですね。

1晩寝ると具体的なものが思いつくかな?(^^;)>

【41396】Re:Do〜Loopについて
発言  ichinose  - 06/8/8(火) 23:47 -

引用なし
パスワード
   ▼ToShiYo さん:
こんばんは。

>たとえば
>
>Do While ActiveCell <> ""・・・Loop
>と
>Do・・・Loop While activeCell<>""
>の違いについて
>
>ループの初めで条件判断させることは理解できますが
>ループの後で条件判定させなければならないようなケースは
>どのようなことなのでしょうか。
>そのような具体的な例はあるのでしょうか?

>Do・・・Loop While activeCell<>""

は、最低でも一回は、Do〜Loopの中のコードを実行する場合に使うと便利です。


>Do While ActiveCell <> ""・・・Loop

は、条件によっては、一度もDo〜Loopの中のコードを実行することがない可能性が
あるコードです。


例1

1〜100までの整数を乱数を使用して無作為に数字を取得して、
目標値が取得できるまで、A1から順に取得したデータを書き込みます。
目標値をセルAnに書き込んだら、処理は終了です。
目標値が100だとすると、A列に

2
3
50
30
35
100

のように表示します。

標準モジュールに

'===========================================================
Sub test1()
  Const 目標値 As Long = 100
  Dim rw As Long
  Dim myval As Long
  Columns(1).ClearContents
  Randomize Now()
  rw = 1
  Do
    myval = Int(Rnd() * 目標値) + 1
    Cells(rw, 1).Value = myval
    rw = rw + 1
    Loop While myval <> 目標値
End Sub


これを
Do While 〜・・・Loopの形でコード化すると、

'========================================================
Sub test1()
  Const 目標値 As Long = 100
  Dim rw As Long
  Dim myval As Long
  Columns(1).ClearContents
  Randomize Now()
  rw = 1
  myval = Int(Rnd() * 目標値) + 1
  Do While myval <> 目標値
    Cells(rw, 1).Value = myval
    rw = rw + 1
    myval = Int(Rnd() * 目標値) + 1
    Loop
  Cells(rw, 1).Value = myval
End Sub


と、どちらでも大抵のことは出来ます。

どっちがすっきりしているかですが・・・。

【41405】Re:Do〜Loopについて
回答  だるま WEB  - 06/8/9(水) 9:39 -

引用なし
パスワード
   >そのような具体的な例はあるのでしょうか?

こんな例はいかがでしょうか。^d^

Sub test()
  Dim Ans As Variant
  
  Do
    Ans = Application.InputBox("パスワードを入力")
    If Ans = False Then Exit Sub
  Loop While Ans <> "111"
  
  MsgBox "ループを抜けました。"
End Sub

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