実現したいこと
VBA内部でもつブーリアン型が何なのか知りたいです。
VBAのブーリアン型は既定値がFalseです。
でも無限ループではTrueのような気がします。
VBA内部では無限ループのときだけTrueになったりするのでしょうか。
よろしくお願いします。
前提
無限ループを書いてみてどう動くか確認していました。
該当のソースコード
vba
1Private Sub CommandButton1_Click() 2 Do While True 3 Debug.Print "DoWhile OK" 'ココが動く 4 Loop 5 Do Until True 6 Debug.Print "DoUntil OK" ’ココは動かない 7 Loop 8End Sub
> でも無限ループではTrueのような気がします。
そんなことはありません。VBAのDo文における"Until"の使い方、理解の問題です。"Until"について調べてみてください。英語におけるuntilは「~になるまで」、転じて「式の評価の結果が偽/Falseである間」になります。
公式の情報はこちら。
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/doloop-statement
実際動くのはDoWhileのループです。DoUntilがtrueになるまで(falseである間)ならブーリアンの既定値falseなのでDoWhileは動かずDoUntilが動くはずです。しかし実際動いているのが逆になっています。
「ブーリアンの既定値」の解釈が何か違っているのではないでしょうか?
ブーリアン型の規定値とwhile, untilの話は分けてる考えていいかと思います。
そのていで、whileはブロックを抜けようとするとき、与えられた式がtrueならもう一度実行し、untilならその逆というのが仕様です。ifに置き換えてみると、
```
StartLoop:
Debug.Print "DoWhile OK"
If True Then ' While Trueと同じ意味
GoTo StartLoop ' ココでスタートに戻る
End If
```
になります。
そして、もし、DoWhileはFalseを与えられたらループするという意味で解釈しているならそれはたんなる間違いです。
Do Whileが動作するのは、明らかに正常な動作です。
おそらく、あなたの認識が真逆なのでしょう。
Do Whileは
- Trueの時に動作する/ループを行う
- Falseの時にループから抜ける
であり、Do Untilはその逆です。
いろいろ書いてありますが、
>VBAのブーリアン型は既定値がFalseです。
は、「VBAのブーリアン型**の変数の**は既定値がFalseです。」が正いので、質問者さんの解釈や考えかたが間違えているのでしょう。
そして、質問のコードにはブーリアン型の変数が出てきませんので、既定値がどのようになっているかの判定にもなっていません。
と書いていたら、回答に同様のことが書いてありました。
回答1件
あなたの回答
tips
プレビュー