秀丸マクロ: サブルーチンの作り方

基本形

まずはサブルーチンの基本形を紹介します。

秀丸マクロサンプルコード


// サブルーチン呼び出し
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;

秀丸マクロ