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?

VBAで書くヒータープログラム

Last updated at Posted at 2025-09-20

はじめに

20年くらい前のことです。お取引先様での常駐案件で、前任者からの引き継ぎ作業をしたのですが、あるExcel VBAのソースコードには、無限ループだけがコーディングされていました。

Excel VBA(実際には、ここまで単純ではありません)
Option Explicit

Public Sub ExecuteMugWarmer()
    Do
        DoEvents    '' トルな!!
    Loop
End Sub

前任者に 「この無限ループ、何を意図していますか?」 と聞いても、自分のあごをさするばかりです。

「発熱させるためですか!?」

image.png

(うーん、マ〇ダム!!)

終了判定のミス?

自分自身も、永久ループのコーディングをしてしまうことがあります。
例えば、ExcelシートのA列の連続データを走査し、B列に整形文字列を書き込むような処理でよくミスをします。

Excel VBA
Option Explicit

Public Sub ExecuteMugWarmer2()
    Dim i As Integer
    Dim s As String
    
    With Sheet1.Range("A2")
        i = 0
        Do Until .Offset(i, 0) = ""
            s = "TEXT:" & Format(.Offset(i, 0), "000")
            .Offset(i, 1) = s
            DoEvents    '' トルな!!
        Loop
    End With
    
End Sub

終了判定は、正しく見えますが、行のオフセットiが、ゼロのままですので、永久に1行目を処理し続けています。
i = i + 1が抜けています)

DoEvents ''トルな

示されたコードを実行する際は、DoEvents '' トルな!!を削除しないでください。
DoEventsを削除すると、処理を中断もしくは停止することができなくなるります。

おわりに

開発の初期段階では、Do-Loopの中に、DoEventsを含めておくことをお勧めします。
Do-Loopが抜け出すことを確認してから、DoEventsを削除します。

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?