2026年2月4日
Adobe illustrator
バラバラのテキストをつないで1つに!
バラバラのテキストをつないで1つに!
1単語ずつバラバラのテキストを改行しつつ1つに繋ぎたい…
例えばこんな状態になったデータを右のように1つのテキストオブジェクトにしたい…ということ、ありませんか?
バラバラのテキストをまとめてコピーして新規テキストオブジェクトとしてペーストしてみると…
「かんぴょううるいいんげんれんこんはくさいふくべきゅうりとまと」とこんな感じ。
改行もされていないし、入力されたオブジェクト順にコピーされるので、上から下への流れ順もバラバラ。
手動で直すの、面倒ですよね。

こんな時はScriptで一発解決!
illustratorドキュメントのXY軸を意識して、一発でつないでくれるScriptを書いてみました。
バラバラのオブジェクトも、上から下へ、上下関係が希薄な場合は左から右へ、テキストの入力された順(作成された順)は無視して配置された見た目順につないでくれます。
#target illustrator
(function () {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません");
return;
}
var doc = app.activeDocument;
if (doc.selection.length === 0) {
alert("テキストを複数選択してから実行してください");
return;
}
var items = [];
// TextFrameだけ拾う
for (var i = 0; i < doc.selection.length; i++) {
var it = doc.selection[i];
if (it.typename === "TextFrame") {
var str = it.contents;
str = str.replace(/^\s+|\s+$/g, ""); // trim
if (str !== "") {
// geometricBounds: [left, top, right, bottom]
var b = it.geometricBounds;
items.push({
text: str,
left: b[0],
top: b[1]
});
}
}
}
if (items.length === 0) {
alert("選択内にテキストがありません");
return;
}
// 同じ行判定のための許容値(pt)
// 数字を大きくすると「多少ズレてても同じ行」とみなす
var rowTolerance = 5;
// 上→下(top降順)、同じ行なら 左→右(left昇順)
items.sort(function (a, b) {
// topは大きいほど上(Illustrator座標)
if (Math.abs(a.top - b.top) > rowTolerance) {
return (b.top - a.top); // 上が先
}
// 同じ行扱いなら左が先
return (a.left - b.left);
});
// 結合(改行)
var merged = [];
for (var j = 0; j < items.length; j++) {
merged.push(items[j].text);
}
var mergedText = merged.join("\r");
// 新しいテキストフレームを作成
var tf = doc.textFrames.add();
tf.contents = mergedText;
tf.position = [100, 100];
alert("結合しました!(" + items.length + "件)");
})();
使い方は簡単
上記コードをテキストエディターの新規ドキュメントにペーストして、名前を付けて保存。
拡張子は、「.jsx」。例えば「mergeText.jsx」なんて名称はどうでしょう?
これを、一旦デスクトップにでも保存しておいて下さい。
illustrator側で繋げたいテキストを選択して、ファイルメニューの「スクリプト」内にある「その他のスクリプト」から、先ほどの「mergeText.jsx」を選択。
そうすると…
一発で見た目通りに連結してくれます。
現状のコードでは、フォントやサイズ、行間などは保持されません。
基本コードをベースに「選択じゃなくてレイヤー全てのテキストを連結したい!」「テキストのサイズやフォントは維持したい!」など、適用カスタムしてみてください。
スクリプトを自作して業務効率を図ると、ちょっとストレス軽減です。

