記事公開日
最終更新日
生成AIで宛名レイアウトスクリプトを作らした。

最近、Geminiの画像生成・動画生成の機能を試して見ましたが、その素晴らしさに圧倒されました。
この三栄NAVIのブログの中でも幾つか紹介してます。
また、Web上では、画像に引けを取らず、プログラムのコーディング力も相当進化してるらしい。
と言う事で、プログラムコーディングに挑戦しました。
今迄も、実験的ではありますが、簡単なスクリプトのコーディングの経験はあります。
今回は、本格的なものを最後までやり遂げようと開始しました。
弊社では、宛名レイアウトの自動化は、ある程度形にはなっており、運用しています。
したがって、宛名レイアウトのスクリプトをコーディングしてもらい、それを現在のシステムに近いところまで、作り上げる事を目標にしました。
最終的には、プロに近いものが出来上がったと思います。
出来上がった所で、Geminiに、まとめの紹介記事を生成してもらいました。
はじめに:なぜ開発したのか
DTPの現場において、宛名印刷は単純作業に見えて実は奥が深い業務です。 InDesign標準の「データ結合」機能などは便利ですが、以下のような課題がありました。
-
長い会社名や部署名が入るとレイアウトが崩れる
-
名前の文字数(2文字、3文字など)によって文字間隔のバランスが悪くなる
-
「御中」の位置が固定だと、宛名がない場合に間が抜けて見える
-
縦書きと横書きでルールが全く異なる
これらを解決し、*「プロが手作業で調整したような美しい文字組み」*をボタン一つで実現するために、Excel VBAからInDesignを制御する専用システムを構築しました。
システムの概要
このシステムは、Excel(データ管理・操作画面) と Adobe InDesign(レイアウト・出力) を連携させて動作します。
-
データ管理: Excelに入稿データ(CSV/XLSX)を取り込み。
-
レイアウト設定: フォント、文字サイズ、座標、行間などをExcel上で細かく数値指定。
-
自動組版: VBAがInDesignを操作し、1件ずつ最適なレイアウトで配置。
-
出力: InDesignファイル(.indd)とPDF(.pdf)を自動保存。
縦書き用と横書き用で処理系を最適化し、メモリ不足を回避するためにモジュールを分割運用する設計にしています。
こだわりの機能ハイライト
1. 「文字数」に応じた究極のバランス調整
単に流し込むのではなく、人名の文字数に応じてスペース(アキ)を自動調整するロジックを組み込みました。
-
1文字・2文字の名字: 間に半角スペースを2つ入れる。
-
2文字姓・3文字名: 姓の文字間に半角スペースを入れてバランスを取る。
-
連名時: 独自の「7文字取り」ルールを適用し、姓名の間に全角スペースを入れるなど、単独宛名とは異なるロジックで美しく揃えます。
これにより、「田中 宏」さんも「佐々木 健太郎」さんも、見た目の重心が整った状態で出力されます。
2. 「御中」配置のインテリジェント制御
宛名(個人名)がない場合、会社名や部署名の後に付く「御中」の位置は非常に重要です。
-
右端合わせ(横書き): 会社名、部署名の中で「一番右に来ている行」を検出し、その少し後ろに配置します。
-
はみ出し防止: 用紙サイズギリギリになる場合は、自動的に会社名の幅を縮めて(長体をかけて)スペースを確保します。
-
敬称の自動判定: データに指定があればそれを優先し、なければ自動で「様/御中」を振り分けます。既製ハガキ(「様」印刷済み)用に印字をスキップする機能も搭載しました。
3. フォントサイズの「階層ルール」と自動長体
長い部署名が入ってもデザインを破綻させないため、以下のルールを自動適用します。
-
階層ルール: 「会社名 ≧ 部署1 ≧ 部署2 ≧ 肩書」というサイズ関係を維持。下位の要素が上位より大きくならないよう自動縮小します。
-
FitText機能: 指定した枠幅に収まりきらない場合は、文字を変形(長体)させて枠内に押し込みます。
4. 実務に即した細かい気配り
-
郵便番号: 「〒」マークの有無やハイフンの除去をフラグ一つで切り替え可能。
-
部署名のスペース処理: 部署名に含まれる全角スペースを自動で半角に変換し、間延びを防ぐ。
-
拡張性: QRコードや連番を後から追加するための「カスタム処理フック」を用意。
開発の裏話・苦労した点
縦書きと横書きの違い
縦書きと横書きでは、座標の考え方や文字の詰め方が根本的に異なります。最初は一つのプログラムで対応しようとしましたが、コードが複雑化しすぎたため、モジュール(ファイル)を分割するという決断をしました。これにより、メンテナンス性と安定性が飛躍的に向上しました。
「戻らない」ための工夫
機能を追加していくと、以前動いていた機能が動かなくなる(デグレード)ことがありました。 これを防ぐために、「あらゆるパターンの名前・会社名が入ったテストデータ」を用意し、修正のたびに全パターンでの出力テストを行うフローを確立しました。地味ですが、品質担保にはこれが一番効きました。
まとめ
このシステムのおかげで、これまで手作業で微調整していた宛名組版の時間をほぼゼロにすることができました。 Excel VBAは古い技術と思われがちですが、InDesignのようなDTPソフトと組み合わせることで、業務効率化の強力な武器になります。
もし同様の自動化に興味がある方がいれば、ぜひ挑戦してみてください!
Aiにまとめた記事まで作ってもらいましたが、補足しておきます。
仕様を文書で準備しておく事
当たり前の話ですが、都度、思い付きだけで進めて行くのはダメ。
簡単でも良いから、方針だけでも書いておく事。
都度の思い付きを仕様書に追加変更を行う。
テスト用のデータを保存しておく事
郵便番号から始まって、1項目づつ、レイアウトのバランスを見ながら、訂正し確認し進めていきました。
テスト用のデータも都度用意しながら進めました。そして、結果がOKになった時点で、次の項目に移っていく。
進めて行きながら、完成に近づいて行く。しかし、OKになっていた項目が、NGとなっている。
こんな事が、何回かありましたが、その都度確認用を用意しなければならなかった。
スクリプトのレビジョン管理しておく事
テスト用のデータを保存しておく事と言いましたが、機能の追加、変更を指示した場合は、それまでの結果は、必ず保存していく事。
出来れば、完成するまでは、変更・追加する毎に、全て保存しておくと良い。
Aiにまとめてもらった記事の中にもあったが、「戻らないための工夫」・・・の為にもレビジョン管理は重要。
最後に
コーディングに関しては、生成したものをコピー&ペースト のみの作業です。
コピペ後の実行で、プログラムのエラーもあり、再コーディングしてもらい少しづつ進めました。
何とか、完成まで来ましたが、エクセルVBAでのコーディングは出来なくても問題無いと思います。
当然ですが、組版を行うインデザインの機能は判っている必要があります。
実際に使って行くうちに、さらに完成度を上げたいとも思ってますが、作成過程が、Geminiに残っている事は、便利です。
仕様書が有るわけでは無く、今迄の経験をもとに、頭で都度仕様を考え、文書で知らせる。
この仕様を指示文にまとめ入力するのは、結構大変でした。反省として、大雑把でもよかったので仕様書は用意しておくべきでした。
複雑になっていくと、AIにかみ砕いて伝える、場合によっては、あなたならどうする・・・・なって感じでアイデアを出してもらう。
このアイデアが、結構よかったりしたりする。
それでも、どうしてもかみ合わない時があり、試行錯誤、どうにかして私の意図を伝えようとしてもらちが明かず、
コーディング内容を調べ、勉強をしてAiに指摘したこともありました。
コーディングを進めたステップ・項目を紹介しておきます。
1,お客様の住所リストの読み込むスクリプト
2,項目の並び順を既定の順にするスクリプト
3,データの正規化(縦組、横組)するスクリプト
4,自動組版のスクリプト
縦組コーディング
郵便番号
住所
会社
部署
肩書
名前
連名処理
横組みコーディング
縦組みと同じステップで行ったが、メモリ不足
縦組み、横組みを分離した。
三栄NAVIの中で、ワードを使ったレイアウトシステムを紹介した事が有りました。
これを元に、どなたか、ワードを使った完成度の高いシステムにチャレンジしてみてはと思います。
⇒ 宛名書きレイアウトソフトを自作しました(連名にも対応)
次回に、プログラムの概要を紹介します。



