English help on website



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

 変数は、変数と変数名を管理する領域のサイズが合計で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)
 影響の及ぶ範囲(アクティブ切り替え)