データの受け渡しでよく起きるのがこれ。
- 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分)
- 秀丸で新規ファイルを開く
- 上のマクロを貼り付ける
delimiter_convert.macで保存- マクロ → マクロ登録 で登録
- 必要ならキー割り当て
使い方
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パーサを使うのが安全
