テキスト編集で地味に多い作業がこれ。
- 連番を振りたい(1,2,3…)
- 今日は何日だっけ?を入れたい(YYYY-MM-DD)
- ログやメモに時刻を入れたい(タイムスタンプ)
- 同じファイルの複数箇所にまとめて入れたい
手で打つと遅いしミスる。
だから秀丸マクロで「選択範囲に一括挿入」できるようにする。
できること(この記事のゴール)
このマクロで次ができる。
- 連番挿入:選択した複数行に
123… を付ける - 今日の日付挿入:
2025-12-28みたいな形式を挿入 - タイムスタンプ挿入:
2025-12-28 22:15:03みたいな形式を挿入
さらに、
- 選択が無ければ「現在行」だけでも使える
- 置き換えじゃなくて「前置/後置」も選べる
マクロ本体(コピペで使える)
ファイル名:insert_seq_date_ts.mac
/*
insert_seq_date_ts.mac
連番/日付/タイムスタンプを挿入する。
モード:
1 = 連番(選択行に 1..n を付与)
2 = 今日の日付(YYYY-MM-DD)
3 = タイムスタンプ(YYYY-MM-DD HH:MM:SS)
挿入位置:
A = 行頭に付ける
B = 行末に付ける
R = 選択範囲を置換(行単位で)
選択が無い場合:
カーソル行を対象にする(行を自動選択)
*/
#mode = val(input("挿入モード: 1=連番 / 2=日付 / 3=タイムスタンプ", "1"));
$pos = input("挿入位置: A=行頭 / B=行末 / R=置換", "A");
$CR = char(13);
$LF = char(10);
// 対象範囲:選択が無ければカーソル行
if (!selecting) {
golinetop;
beginsel;
golineend;
}
// 対象文字列取得
#sx = seltopx;
#sy = seltopy;
$s = gettext(#sx, #sy, selendx, selendy, 1);
// 改行をLFに寄せる(処理用)
$s2 = strreplace($s, $CR + $LF, $LF);
$s2 = strreplace($s2, $CR, $LF);
#slen = strlen($s2);
// 日付/時刻(秀丸の時刻関数)
$Y = str(year);
$M = str(month);
$D = str(day);
$h = str(hour);
$m = str(minute);
$sec = str(second);
// 0埋め関数(簡易)
if (strlen($M) == 1) $M = "0" + $M;
if (strlen($D) == 1) $D = "0" + $D;
if (strlen($h) == 1) $h = "0" + $h;
if (strlen($m) == 1) $m = "0" + $m;
if (strlen($sec) == 1) $sec = "0" + $sec;
$date = $Y + "-" + $M + "-" + $D;
$ts = $date + " " + $h + ":" + $m + ":" + $sec;
// 行ごとに処理
#start = 0;
#num = 1;
$out = "";
while (1) {
#p = strstr($s2, $LF, #start);
if (#p < 0) {
$line = midstr($s2, #start + 1, #slen - #start);
#last = 1;
} else {
$line = midstr($s2, #start + 1, #p - #start);
#last = 0;
}
$ins = "";
if (#mode == 1) {
$ins = str(#num);
#num = #num + 1;
} else if (#mode == 2) {
$ins = $date;
} else if (#mode == 3) {
$ins = $ts;
} else {
$ins = "";
}
// 置換/行頭/行末
if (toupper($pos) == "R") {
$newline = $ins;
} else if (toupper($pos) == "B") {
// 行末(スペース1個を挟む)
if ($line == "") {
$newline = $ins;
} else {
$newline = $line + " " + $ins;
}
} else {
// 行頭(デフォルト)(スペース1個を挟む)
if ($line == "") {
$newline = $ins;
} else {
$newline = $ins + " " + $line;
}
}
$out = $out + $newline;
if (#last) break;
$out = $out + $CR + $LF;
#start = #p + 1;
}
// 選択範囲を置換
delete;
moveto #sx, #sy;
insert $out;
message "挿入 完了";
導入手順(3分)
- 秀丸で新規ファイルを開く
- 上のマクロを貼り付ける
insert_seq_date_ts.macで保存- マクロ → マクロ登録 で登録
- 必要なら キー割り当て でショートカットを付ける
使い方(例)
1) 連番(行頭に付ける)
対象の行を複数選択 → マクロ → 1 → A
実行前
りんご
ばなな
みかん
実行後
1 りんご
2 ばなな
3 みかん
2) 今日の日付を行末に付ける
選択 → マクロ → 2 → B
実行前
作業開始
作業終了
実行後
作業開始 2025-12-28
作業終了 2025-12-28
3) タイムスタンプで置換(行単位)
選択 → マクロ → 3 → R
実行前
ここに何かメモ
ここもメモ
実行後
2025-12-28 22:15:03
2025-12-28 22:15:03
よくある調整ポイント
スペース区切りじゃなく「タブ」にしたい
" " + の部分を char(9) にするだけでいける。
連番を 001,002… にしたい
$ins = str(#num); を 0埋めロジックに変えればOK(桁数を決めて埋める)。
注意点
- このマクロは「行単位」で動く。
“ファイル内の任意の複数箇所(バラバラの位置)” に入れたい場合は、
その箇所をまとめて選択して行単位として扱うのが一番安全。 - 「置換(R)」は内容を消す。使う時は要注意。
まとめ
連番・日付・タイムスタンプは、手作業でやると遅いしミスる。
秀丸マクロで「選択→一発」を作っておくと、メモ・ログ・手順書の回転が上がる。
