$buf = "tanaka,suzuki,yamada,sato";
call Split $buf, ",";
while ( #i <= ##return ) {
$msg = $msg + $ReSplit[#i] + "\n";
#i = #i + 1;
}
message $msg;
endmacro;
Split:
while ( ##i < strlen($$1) ) {
if ( midstr($$1, ##i, 1) == $$2 ) {
##cnt = ##cnt + 1;
$ReSplit[##cnt -1] = midstr($$1, ##start, ##i - ##start);
##start = ##i + 1;
}
##i = ##i + 1;
}
$ReSplit[##cnt] = midstr($$1, ##start);
return ##cnt;

サブルーチンは、ラベルで定義しておく。サブルーチンを呼ぶときはcallを使う。
呼び出された方は、引数を「$$1」「$$2」のようにして受け取る。もちろん、数値型は「##1」みたいな。
返り値は、サブルーチン側で「return 返り値」とする。呼び出した方で、この返り値を使うときは「$$return」か「##return」を使う。
サブルーチン内で、「$$」または「##」で始まるのはローカル変数。
VBAのSplit関数みたいなのを作ってみた。返り値は、UBound関数と同じで、最も大きい要素番号(実際は、セパレータの数)。分割した配列は、グローバル配列$ReSplitに格納される。