プログラミング

プログラミングに関するフォーラムです。VBAは除きます。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Do While Loopの疑問
投稿日時: 17/04/18 07:05:45
投稿者: hisayanxp

+1を19 になるまでたし続ける式を作ったつもりですが、うまくいきません。
どこが良くないのでしょうか?
よろしくお願いします。
 
Dim Counter
    Counter = 0
Do Counter + 1
Loop While Counter < 20
MsgBox Counter

回答
投稿日時: 17/04/18 09:54:53
投稿者: hatena
投稿者のウェブサイトに移動

Do の後には、
While 条件式 か Until 条件式 以外は置けません。
加算する処理は次の行に記述します。
 

    Dim Counter
    Counter = 0
    Do
        Counter = Counter + 1
    Loop While Counter < 20
    MsgBox Counter

 
ただし、これだと、
結果メッセージは 20 になります。

投稿日時: 17/04/18 15:30:12
投稿者: hisayanxp

hatenaさんありがとうございます。
教えていただいた式を以下のように変えてみました。
Dim Counter
    Counter = 0
Do
    Counter = Counter + 3
Loop While Counter < 20
MsgBox Counter
 
実行すると 21 になってしまいます。
私としては 18 を期待していました。
MsgBoxの後にCounterだからたし続けてその結果 21 を出しているのだと思いますが、この18を表示させるためにはどんな式にしたえら良いでしょうか?
恥ずかしながらまったく浮かびません。

回答
投稿日時: 17/04/18 17:08:28
投稿者: hatena
投稿者のウェブサイトに移動

やりたいことを日本語で論理的に說明すると、
 
加算したときに20を超えないように、加算する。
 
ということでよね。
まずは、自分がしたいことを正確に分析することが重要です。
それができればあとはプログラミング言語に翻訳するだけです。
 
コード例

    Dim Counter As Long
    Dim AddNum As Long
    
    Counter = 0
    AddNum = 3
    Do While Counter + AddNum < 20
        Counter = Counter + AddNum
    Loop
    MsgBox Counter

 
 

回答
投稿日時: 17/04/18 18:01:38
投稿者: i-brown

面白そうなので、私も話題に入れてください。
AddNumは自然数と想定しています。
 

Option Explicit

' 加算で解決する例
Private Sub test()
    Const AddNum As Long = 1
    Dim Counter As Long
    Dim x As Long
    
    Do While True
        x = Counter + AddNum
        If 20 <= x Then Exit Do
        Counter = x
    Loop
    
    MsgBox Counter
End Sub

' 剰余で代用する例
Private Sub test2()
    Const AddNum As Long = 1
    Dim x As Long: x = 20 Mod AddNum
    Dim Counter As Long
    
    Counter = 20 - IIf(x = 0, 1, x)

    MsgBox Counter
End Sub

 
失礼いたしました。

回答
投稿日時: 17/04/18 18:03:21
投稿者: i-brown

i-brown さんの引用:
剰余の例が誤っていました
    Counter = 20 - IIf(x = 0, AddNum, x)

が正しいです。すみません。

回答
投稿日時: 17/04/18 21:11:55
投稿者: hatena
投稿者のウェブサイトに移動

i-brown さんの引用:

    Do While True
        x = Counter + AddNum
        If 20 <= x Then Exit Do
        Counter = x
    Loop


 
While True はなくてもいいですね。
 
    Do
        x = Counter + AddNum
        If 20 <= x Then Exit Do
        Counter = x
    Loop

投稿日時: 17/04/19 09:18:55
投稿者: hisayanxp

hatenaさん、i-brownさん  ありがとうございました。
 
AddNumの変数を使えばうまくいくということが良く分かりました。