English help on website



マクロの概要(入門用) if文・while文について(Ver9.34対応版)
if文・while文について
マクロは各種の動作を実行する文と、プログラムの流れを制御する制御文からなります。
たとえば現在編集中の文書を今日の日付(2003年12月31日とします)を利用したファイル名「20031231.txt」で新規保存させるマクロを作成するとします。 この場合、保存するフォルダに同名のファイルがあれば上書きしてしまいますので、先にファイルの存在をチェックします。この時同名のファイルがあるかという条件に対して、 「ある」または「ない」の二通りの答えがあります。その答えを元にマクロの処理を変更させます。「ある」場合は上書き保存するのかどうかを使用者に問い合わせるメッセージを表示します。 「ない」場合はファイル名「20031231.txt」で新規保存します。

このように、マクロの処理を分岐したりすることを「制御」といい、それらを実行する文を「制御文」といいます。また、制御するときに利用される条件を判断するために利用するものを「条件式」といいます。

制御文には、前述した比較・論理演算が多く使用されます。比較・論理演算が使用される制御文は、if文、while文が主流です。まず、if文の説明をします。
if文
if文ではその直後にある条件式が0以外(条件式が真)の場合に続く文を実行します。「0」(条件式が偽)の場合は、elseがあるならelseに続く文を実行します(elseがなければ何も実行されません)。
もしAならば、Bにする。だけどもしAでなければ、さてどうする。何もしなくてOKなのか、その場合は○○させるなのか。その「○○させる」がelseにあたります。
if (条件式){
    //条件式が0以外(真)の場合この部分の記述(処理)を実行する
}
else{
    //条件式が0(偽)の場合この部分の記述(処理)を実行する
}
上記の例で考えると、「20031231.txt」と同名のファイルがすでに存在するかどうか、存在する場合を「真」とし、「真」なら、続く文で上書きを実行させることになります。

またたとえば、400文字以内に収めないとならない文章を書いていて、途中今が何文字目かを知りたい場合、それは400より大きいか小さいかを判断させるマクロも前述の「比較演算」で作れるのです。 400より大きいを「真」として、「真」の場合、メッセージを出すという仕組み作りが可能です。


while文
while文は繰り返し処理を実行する場合に使用します。while文ではその直後にある条件式の値が0以外(条件式が真)である間「 { } 」で囲まれた処理を繰り返します。
while (条件式){
    //条件式が0以外(真)の場合この部分の記述(処理)を、
    //条件式が0(偽)になるまで繰り返し実行する
}
たとえば、テキストファイルの中に含まれる半角カタカナを全角カタカナに変換するマクロを作成するとします。マクロの動作はファイルの最初の文字から最後までをひとつずつチェックします。マクロはファイルの最後に到達すると終了します。
具体的なマクロの流れは、以下のようになります。
1.ファイルが終わりでないならば、カーソルをひとつ右へずらします。もし、ファイルの終わりならば、マクロを終了します。
2.カーソルの文字が半角カタカナかどうかを判断します。
もし半角カタカナであれば、その1文字を選択し全角カタカナに変換します。半角カタカナ以外の文字であるならば何もしません。
3.1.に戻ります。

while文は、条件式が0以外(真)の場合は、延々と処理を繰り返しますので、必ず0(偽)になる条件式を指定するか、強制的に条件式に0(偽)になる仕組みを組み込んでください。 たとえば処理をした回数の上限を設けるとか、ファイルの終わりを検出するなどの仕組みが必要です。

マクロで記述すると以下のようになります。
movetolineno 1,1;        //カーソルを最初の文字に移動する
while( code != eof ){    //ファイルの終わりまで以下の処理実行します
    if( code >= 0x00A6 && code <= 0x00DF ){
    //カーソル位置の文字コードの範囲が0x00A6以上かつ0x00DF以下なら
    //半角カタカナなので以下の処理を実行します
        beginsel;         //選択を開始します
        right;            //カーソルを右に移動し一文字だけ選択します
        tozenkakukata;    //選択された文字を全角カタカナに変換します
    }
    else{         //半角カタカナでない時は以下の処理を実行します
        right;    //カーソルを右に移動します
    }
}
!=(等しくない)、<=(以上)、>=(以下)、 &&(AND)の演算子が上記の例の中に見つけられるように、前述した比較演算・論理演算はマクロ制御で多用されます。


戻る 目次 次へ