秀丸エディタで「連番/日付/タイムスタンプ」を一発挿入するマクロ(複数箇所まとめて)

テキスト編集で地味に多い作業がこれ。

  • 連番を振りたい(1,2,3…)
  • 今日は何日だっけ?を入れたい(YYYY-MM-DD)
  • ログやメモに時刻を入れたい(タイムスタンプ)
  • 同じファイルの複数箇所にまとめて入れたい

手で打つと遅いしミスる。
だから秀丸マクロで「選択範囲に一括挿入」できるようにする。


できること(この記事のゴール)

このマクロで次ができる。

  1. 連番挿入:選択した複数行に 1 2 3… を付ける
  2. 今日の日付挿入2025-12-28 みたいな形式を挿入
  3. タイムスタンプ挿入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分)

  1. 秀丸で新規ファイルを開く
  2. 上のマクロを貼り付ける
  3. insert_seq_date_ts.mac で保存
  4. マクロ → マクロ登録 で登録
  5. 必要なら キー割り当て でショートカットを付ける

使い方(例)

1) 連番(行頭に付ける)

対象の行を複数選択 → マクロ → 1A

実行前

りんご
ばなな
みかん

実行後

1 りんご
2 ばなな
3 みかん

2) 今日の日付を行末に付ける

選択 → マクロ → 2B

実行前

作業開始
作業終了

実行後

作業開始 2025-12-28
作業終了 2025-12-28

3) タイムスタンプで置換(行単位)

選択 → マクロ → 3R

実行前

ここに何かメモ
ここもメモ

実行後

2025-12-28 22:15:03
2025-12-28 22:15:03

よくある調整ポイント

スペース区切りじゃなく「タブ」にしたい

" " + の部分を char(9) にするだけでいける。

連番を 001,002… にしたい

$ins = str(#num); を 0埋めロジックに変えればOK(桁数を決めて埋める)。


注意点

  • このマクロは「行単位」で動く。
    “ファイル内の任意の複数箇所(バラバラの位置)” に入れたい場合は、
    その箇所をまとめて選択して行単位として扱うのが一番安全。
  • 「置換(R)」は内容を消す。使う時は要注意。

まとめ

連番・日付・タイムスタンプは、手作業でやると遅いしミスる。
秀丸マクロで「選択→一発」を作っておくと、メモ・ログ・手順書の回転が上がる。

タイトルとURLをコピーしました