秀丸エディタで「区切り文字変換」:CSV↔TSV、カンマ→タブ/セミコロン等に一括変換

データの受け渡しでよく起きるのがこれ。

  • CSV(カンマ区切り)をTSV(タブ区切り)にしたい
  • カンマの代わりにセミコロン ; 区切りにしたい
  • 逆にTSV→CSVに戻したい
  • Excelや別ツールの都合で区切り文字を変えたい

秀丸なら、選択範囲(無ければ全文)を対象に、区切り文字を一発で変換できる。

ただし注意点がある。

「ダブルクォートで囲まれたCSV」(例:"a,b",c)は、単純置換すると壊れる。
この記事はまず「単純な区切り変換(安全寄り)」を扱い、
その上で「引用符付きCSVの注意」を書く。


この記事のゴール

  • CSV↔TSV など、区切り文字を一括変換するマクロ
  • 変換対象は「選択 or 全文」
  • 変換時にありがちな事故(引用符付きCSV)も説明

変換パターン(よく使う)

  • CSV → TSV:,TAB
  • TSV → CSV:TAB,
  • CSV → SSV:,;
  • TSV → SSV:TAB;

マクロ本体(コピペで使える)

ファイル名:delimiter_convert.mac

/*
  delimiter_convert.mac
  区切り文字変換(選択範囲 or 全文):
    - CSV↔TSV
    - カンマ/タブ/セミコロン等へ変換

  注意:
    - ダブルクォートで囲まれたCSV("a,b")を正確に扱う “完全CSVパーサ” ではない。
    - 引用符付きCSVが混ざる場合は、後述の注意を読んで運用すること。
*/

#scope = val(input("対象: 1=選択(無ければ全文) / 2=全文", "1"));
#mode  = val(input("変換: 1=CSV→TSV / 2=TSV→CSV / 3=CSV→; / 4=TSV→; / 5=任意(手入力)", "1"));

if (#scope == 2 || !selecting) {
  selectall;
}

$TAB = char(9);

$from = "";
$to   = "";

if (#mode == 1) {
  $from = ",";
  $to   = $TAB;
} else if (#mode == 2) {
  $from = $TAB;
  $to   = ",";
} else if (#mode == 3) {
  $from = ",";
  $to   = ";";
} else if (#mode == 4) {
  $from = $TAB;
  $to   = ";";
} else {
  $from = input("変換前の区切り(例: ,  or  ;  or  TAB と入力)", ",");
  $to   = input("変換後の区切り(例: TAB or , or ;)", "TAB");

  if (toupper($from) == "TAB") $from = $TAB;
  if (toupper($to)   == "TAB") $to   = $TAB;
}

// 実行(選択範囲内を置換)
replaceallfast $from, $to, inselect;

message "区切り文字変換 完了";

導入手順(3分)

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

使い方

CSV→TSV(カンマ→タブ)

  • マクロ実行 → 1
  • 選択していれば選択範囲だけ、選択が無ければ全文

TSV→CSV(タブ→カンマ)

  • マクロ実行 → 2

任意の区切りに変換

  • マクロ実行 → 5
  • TAB と入力するとタブ扱いになる

変換例

CSV→TSV

入力:

a,b,c
1,2,3

出力(タブ区切り):

a    b    c
1    2    3

CSV→セミコロン

入力:

a,b,c

出力:

a;b;c

重要な注意:引用符付きCSVは単純置換で壊れる

CSVにはこういう行が普通にある。

"Tokyo, Japan",35

このカンマは「区切り」じゃなく「値の中」。
ここを単純に , → TAB すると、値が割れて壊れる。

どう運用するのが安全か

  • 引用符付きCSVが混ざる可能性があるなら
  • 本当に安全にやるなら、外部ツール(PowerShell/Python)でCSVパースしてTSV出力する
  • それを秀丸の外部コマンド連携で戻す(別記事の方式)
  • 引用符が無い(または絶対にカンマを含まない値)と分かってるなら
  • この記事のマクロで十分

おまけ:外部パーサを使う方向性(概要だけ)

  • Pythonなら csv モジュールで読み込み→TSV出力が確実
  • PowerShellなら ConvertFrom-Csv / ConvertTo-Csv も使えるが、整形は調整が要る

「引用符付きCSVを確実に扱いたい」場合は、ここに寄せるのが正解。


まとめ

  • 区切り文字変換は、CSV↔TSVの受け渡しで頻出
  • 引用符付きCSVが無い前提なら、秀丸の一括置換で十分速い
  • 引用符付きが混ざるなら、外部のCSVパーサを使うのが安全
タイトルとURLをコピーしました