◇ IF 文でエラーになる

Q:次のようなマクロを組んでいるのですが、なぜか繰り返し中にエラーになります。

:LOOP
  :
GetTitle %0
IF (in "終了" %0) THEN GOTO :NEXT
ELSE GOTO :LOOP
ENDIF
  :
:NEXT

A: IF 〜 THEN 〜 ENDIF の中から、GOTO で外に出てしまっているからです。インデントをつけて書き直すと、こうなります

IF (in "終了" %0) THEN
  GOTO :NEXT
ELSE
  GOTO :LOOP
ENDIF

 KMmacro は、ブロック IF 文の終了を「ENDIF が来た」事によって判断します。ですから、この例のように GOTO で抜けてしまうと、(FOR 文の時と同様)「IF 文は続いている」と判断したままマクロを続けて、次の IF を実行することになります。これが繰り返されると、IF が幾重にも実行されている扱いになってしまい、エラーになることがあります。
 これを避けるには、IF 〜 THEN 〜 ENDIF の内側以外で、GOTO を使えばいいのです。例えば次のような方法があります。

:LOOP
  :
GetTitle %0
IF (in "終了" %0) GOTO :NEXT
UNLESS (in "終了" %0) GOTO :LOOP    ; この例では UNLESS を使わず単に GOTO〜 でも可
ENDIF
  :
:NEXT

 ブロック IF 文ではない IF 文(THEN を使わない IF 文)の場合は(KMmacro からすれば「(ENDIF がなくても)1行だけで IF 文は終了」と判断できるので)、このような心配をする必要はありません。