作りながら学ぶVBAプログラミング

VBA Do While の書き方

Do WHile の書き方なんて、いまさら。。。とか思いますか? ところが、この Do While の書き方を徹底しておかないと後でひどい目に会います。

Do While のトラブルを生まない書き方

Do While だけではなくFor ループにも実は落とし穴があります。 つまり、無限ループ地獄。 以下の2つは、いずれも無限ループに陥ります。
Do Whil a<>1
  :
a = 1
Loop
For i=0 to 10
  :
i = 1
Next i
VBAは、インタープリタ言語(逐次実行型)なので実行中に止めることができます。 同じように ビジュアルスタジオの vc などもデバッグモードで動かしていれば、途中で実行を止めることができます。 ビジュアルスタジオの VC の場合、無限ループに入って求めることができますが、VBA は止まりません。 通常は、 CTRL + Break で止めることができますが、無限ループの場合止めることができないことがあります。

案外怖い ループでの割り込み非許可

実行中に止まらなくなる原因は、VBAの実行中キー割り込みが止められているためです。 そのため CTRL+Break を押してもシステムがそれをうけとることができなくなります。 時々、システムに割り込みがなかったか調べさせる必要があります。 そのコマンドが DoEvents です。 つまり、前述の2つのループちゅうに DoEvents を入れておかないと無限ループに陥った時、プログラムの実行を止めることができなくなり、それまで書き込んだコードが吹っ飛ぶことになります。 もちろん、実行前にCTRL+Sで上書き保存をする癖は必要です。

安全な Do While , For ループの書き方。

ループの中に DoEvents を書き込む癖をつけましょう。 というか、もう Do While DoEvents は、セットで覚えてしまいましょう。
Do Whil a<>1
DoEvents
  :
a = 1
Loop
For i=0 to 10
DoEvents
  :
i = 1
Next i
割り込みがはいると、その分実行速度が落ちます。 が、もともとVBAは、インタープリタで実行速度は遅い。 多少の処理速度の遅さが気になるような処理をやらせてはいけない。 と思います。 ついつい夢中になって、3時間書き込んだコードを吹っ飛ばすよりはまし。
  • このエントリーをはてなブックマークに追加

ゆずまる・ゆぅべぇ

システムエンジニア/プログラマ歴数十年のゆずまるです。

バナーにもあるように変体的な犬マニアで生まれてからこのかた犬のいない日は経験していません。
中でもコッカースパニエルとラブラドールが死ぬほど好き!

そんなゆずまるは、20数種類の様々な言語を使用してシステム開発をおこなってきました。

そこで使ってきた各言語の自作ライブラリ中のVBAのライブラリを公開しています。

※姉妹サイトに C,PHP などのサイトもネット上に浮遊させております。そちらでもお役にたてましたら無上の喜びw

あなたの一助になれば幸いです。