0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAでボタンによる無限ループの開始・停止を実装する方法

0
Posted at

要件

  • 無限ループの中で処理を実行する
  • STARTボタンを押下すると、無限ループが開始される
  • FINISHボタンを押下すると、無限ループが停止される

このような要件を満たすVBAプログラムの一例です。

サンプルコード(問題点あり)

まず、典型的な実装例を示します。

Dim status As String

' STARTボタンに登録する
Sub Start()
    status = "START"
    Do While status = "START"
        ' <<< ここに処理を実装する >>>
    Loop
End Sub

' FINISHボタンに登録する
Sub Finish()
    status = "FINISH"
End Sub

問題点

上記のコードを実際に実装してSTARTボタンを押すと、Excelが入力を受け付けなくなり、FINISHボタンも押せなくなります。

理由: VBAのループ中は、Excelのユーザーインターフェースがロックされるため、他の操作ができなくなります。

解決策

無限ループの中で DoEvents 関数を呼び出すことで、Excelに他のイベント(ボタン押下など)を処理させることができます。

修正版サンプルコード

Dim status As String

' STARTボタンに登録する
Sub Start()
    status = "START"
    Do While status = "START"
        ' <<< ここに処理を実装する >>>
        DoEvents
    Loop
End Sub

' FINISHボタンに登録する
Sub Finish()
    status = "FINISH"
End Sub

DoEvents をループ内で呼び出すことで、他のボタン操作やイベント処理が可能となり、無限ループを安全に制御できます。

動作環境

  • Microsoft Visual Basic for Applications 7.1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?