English help on website



変数の使い方(Ver9.46対応版)
目次− 変数の使い方
秀丸マクロでは、文字列型と数値型の変数を使うことができます。文字列型の変数は文字列を記憶し、数値型の変数は数値を記憶します。

変数は、変数と変数名を管理する領域のサイズが合計で1MBくらいまで扱えます。(標準の場合。[その他]→[動作環境]→[環境]で上限を指定できます)
上限は、getmaxinfoで知ることができます。

扱える変数の上限に関わらず、$a = "xxx...xxx"; というようにマクロファイル上に文字列を直接記述する場合は1MBの上限があります。(V9.19未満は128KB, V8.88未満は64KB, V8.66未満は4KB)
$a = $b + $c; というように連結して書くと大丈夫になります。

getclipboard関数には4KBの上限があります。

文字列にはNULL文字を含むことはできません。

数値型変数は4バイトの符号付きの値を記憶することができます。
数値は、32bit通常版では32bit、64bit通常版では64bitが扱えます。
浮動小数点数版では、setfloatmodeを呼ばないときは32bit版/64bit版に関わらず、数値は32bitになります。(参照

変数名には30文字程度までの適当な英数字を使用することができます。
文字列型変数は先頭が$で始まり、数値型変数は#で始まります。
変数名は大文字/小文字が区別されます。

変数名の例
#number
$top_string_1
#x100
変数に値を代入するには、=を使います。
値の代入例
#num = 100;
$str = "斉藤秀夫";
数値型変数に文字列を代入したり、文字列型変数に数値を代入しようとするとエラーになります。
エラーになる例
#num = "ABC";
$str = 100 / 4;

秀丸マクロでは、ユーザが関数のようにサブルーチンを作ることができるようになっています。
サブルーチンの中だけでローカルな変数を使いたい場合は、##または$$が先頭に付いた変数を使います。
#または$だけで始まる変数は、グローバルな変数として扱われます。
call Sub;
call Sub;
endmacro;

Sub:
message str(##a); //常に0
##a = 1;
message str(##a); //1
return;


変数の名前のうしろに角カッコで添え字を付けると、簡単に配列変数を作ることができます。
#a[0] = 1;
#a[1] = 2;
#a[ #b + 1 ] = 5;
#b = #a[2];
角カッコを連ねて添え字を増やせば、何次元の配列でも作ることができます。
#a[0][0] = 1;
#a[5][2] = 1;
まだ代入していない変数や、代入していない配列でも、参照してエラーになることはありません。
数値は0で、文字列は""になります。
message str(#a);
message str(#b[10]);
message $c;
message $d[20];

変数は、マクロが実行し続ける限りは、newfile,openfileやsetactivehidemaru等で実行対象の秀丸エディタが変わっても維持し続けます。
参照:影響の及ぶ範囲(アクティブ切り替え)
message str(#a); //常に0
#a = 1;
message str(#a); //1
newfile;
message str(#a); //実行対象が変わっても1
endmacro;
execmacroで別のマクロを実行する場合は、変数は共有されず、別の空間で扱われます。
test.mac
#a = 1;
message str(#a); //1
execmacro "test2.mac";
message str(#a); //test2.macとは別の空間で1のまま
endmacro;

test2.mac
#a = 2;
endmacro;
マクロが終了しても保持させたい場合は、setstaticvariableで記憶し、getstaticvariableで取り出す方法があります。

参照:
 影響の及ぶ範囲(execmacro)
 影響の及ぶ範囲(アクティブ切り替え)