秀丸マクロ: サブルーチンの作り方
基本形
まずはサブルーチンの基本形を紹介します。
秀丸マクロサンプルコード
// サブルーチン呼び出し
call ラベル名;
endmacro;
// ------------------------
// サブルーチン
ラベル名:
// 処理を記述
// 戻る
return;
秀丸マクロのサブルーチンにつける名前を「ラベル名」と言い、 記述する場合はラベル名の後に:(コロン)を付けます。 サブルーチンの処理が終わって戻る場合は「return;」で戻ります。
サブルーチンを呼び出す側では「call ラベル名;」で呼び出します。
上記のプログラムの場合、
サブルーチンの前に「endmacro;」と記述してマクロを終了しています。
もし「endmacro;」がない場合は、再びサブルーチンが実行されて下図のエラーが発生しますから、
サブルーチンの前には「endmacro;」を記述してください。

引数(パラメータ)
秀丸マクロのサブルーチンで引数を指定する場合は、 ラベル名の後に記述します。 複数ある場合はカンマで区切ってください。 引数の上限値は9個です。
秀丸マクロサンプルコード
// 引数を3つ指定
call test "a", "b", 1;
endmacro;
// サブルーチン
test:
// 引数を取得
message $$1; // a 文字列型
message $$2; // b 文字列型
message str(##3); // 1 数値型
return $$str;
サブルーチン側で受け取った引数を使用する場合は、 「$$番号」(文字列型)や「##番号」(数値型)のように記述します。 上のサンプルコードでは、1番目、2番目の引数が文字列型、 3番目の引数が数値型なので「$$1」「$$2」「##3」で使用できます。
戻り値
秀丸マクロのサブルーチンでは、戻り値を1つだけ返すことができます。returnの後に指定した値を戻します。 呼び出し側で戻り値を使用するには「$$return」(文字列型の場合)、 または「##return」(数値型の場合)で使用できます。
呼び出し元とサブルーチン側で戻り値の型を合わせておく必要があります。 例えば、「return 数値型;」と記述した戻り値を「$$return」で使用すると、 エラーが発生します。
戻り値が文字列型の場合
「$$return」で取得できます。
// サブルーチン呼び出し
call test;
// 戻り値を表示
message $$return; // hello
endmacro;
// サブルーチン
test:
$str = "hello";
return $str;
戻り値が数値型の場合
「##return」で取得できます。
call test;
message str(##return); // 1
endmacro;
// サブルーチン
test:
#num = 1;
return #num;
ローカル変数
サブルーチンでローカル変数を使用する場合は、 「$$変数名」(文字列型)、「##変数名」(数値型)と記述します。
呼び出し側とサブルーチン側で変数名がかぶっている場合、 「$$」と「$」や、「##」と「#」の付け間違いがバグの原因となることもあるので 注意してください。
秀丸マクロサンプルコード
$str = "abc";
call test; // サブルーチン 呼び出し
message $str; // efg 書き換えられている
endmacro;
// サブルーチン
test:
// ローカル変数
$$str = "xyz";
message $str; // abc
message $$str; // xyz
// メイン側の変数の値を書き換える
$str = "efg";
return;