【入門編】【中級者向け】デザインテンプレートの定型テキスト部分にExcelのリストデータを自動差し込みし、大量のバリエーションページを一括生成 – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身が全然わからない……」と頭を抱えていませんか?

大丈夫、ここをクリアすれば、あなたも立派なCorelDRAW VBAの使い手です。今回は、業務効率化の王道である「Excelデータ連携によるデザインの自動量産(データバインディング)」を徹底解説します。

名刺、プライスカード、イベントのチケットなど、「デザインの枠組みは同じで、中の文字だけが変わる」という案件は山ほどありますよね。これを人の手でコピペして回るのは、時間が溶けるだけでなく、コピペミスの温床になります。

今回は、Excelのリストを読み込み、CorelDRAWのテンプレートに流し込んで一瞬で大量のページ(またはファイル)を生成する、実務直結のスマートな自動化システムを一緒に作っていきましょう!

—

1. なぜ「データバインディング」なのか?(マクロ記録からの脱却)

まず、心構えからお話しさせてください。
「マクロの記録」は便利な機能ですが、出力されるコードは「画面上の操作をそのままなぞっただけの冗長なコード」になりがちです。

真に実用的なVBAを書くためには、「オブジェクトの階層構造(ドキュメント > ページ > レイヤー > シェイプ)」を理解し、メモリ上でスマートにデータを流し込む必要があります。

今回目指すアーキテクチャの全貌はこうです:
1. Excelの表からデータを1行ずつ取得する
2. CorelDRAWの指定したテキストフレーム(プレースホルダー)の文字列を書き換える
3. 必要に応じてページを追加、あるいは別名で保存する

この流れをマスターすれば、100枚のバリエーション作成も、ボタン一つでコーヒーを飲んでいる間に終わるようになります。

—

2. 準備:CorelDRAW側のデザイン設計ルール

VBAを走らせる前に、CorelDRAW側の「お作法」を整えておきましょう。ここが命です。

プレースホルダー(差し込み対象)の命名規則

VBAから特定の文字オブジェクトを正確に指し示すためには、「オブジェクト名(シェイプ名)」が不可欠です。

1. CorelDRAWでテキストツールを使い、名刺やカードのレイアウトを作ります。
2. 氏名、役職、部署名など、Excelからデータを流し込みたいテキストを選択します。
3. ドッキングウィンドウの「オブジェクト」マネージャ(または「オブジェクトマネージャ」)を開きます。
4. それぞれのテキストシェイプの名前を、次のように半角英数で分かりやすく変更しておきます。

  • `txtNamae` (氏名用)
  • `txtYaku職` (役職用 → 英語なら `txtTitle` など)
  • `txtBusho` (部署名用 → `txtDepartment`)

※この名前(`Name` プロパティ)が、VBAのコードとデザインを繋ぐ魔法の鍵になります。

—

3. 実装:Excelデータ自動差し込みマクロの全コード

それでは、CorelDRAWのVBAエディタ(`Alt + F11` で起動)を開き、標準モジュールに以下のコードを貼り付けてください。

今回は、分かりやすさを最優先しつつ、実務で耐えうる堅牢なコードを用意しました。

Sub AutoGenerateBadges()
‘ =========================================================================
‘ 処理概要: Excel等のリストデータを想定し、CorelDRAWのテンプレートに
‘ テキストを流し込み、ページを自動複製して一括生成するスクリプト
‘ =========================================================================

Dim doc As CDR.Document
Set doc = Application.ActiveDocument

If doc Is Nothing Then
MsgBox “アクティブなドキュメントが存在しません。テンプレートを開いてから実行してください。”, vbCritical
Exit Sub
End If

‘ 【サンプルデータ】本来はExcelのRange等から取得しますが、今回はVBA内の配列で模擬します
‘ 列構造: (1) 氏名, (2) 役職, (3) 部署
Dim rawData(2, 2) As String

‘ 1人目
rawData(0, 0) = “山田 太郎”
rawData(0, 1) = “チーフエンジニア”
rawData(0, 2) = “開発部”

‘ 2人目
rawData(1, 0) = “鈴木 花子”
rawData(1, 1) = “シニアデザイナー”
rawData(1, 2) = “クリエイティブ事業部”

‘ 3人目
rawData(2, 0) = “佐藤 健一”
rawData(2, 1) = “プロダクトマネージャー”
rawData(2, 2) = “マーケティング部”

Dim i As Long
Dim targetPage As CDR.Page
Dim basePage As CDR.Page

‘ 基準となる1ページ目をマスタ(テンプレート)として保持
Set basePage = doc.Pages(1)

‘ データの件数分ループを回す
For i = 0 To UBound(rawData, 1)

‘ 2人目以降はページを新規追加する
If i > 0 Then
Set targetPage = doc.Pages.Add(1) ‘ 末尾に1ページ追加
‘ 1ページ目の内容を新しいページに複製する場合はここに処理を追加
‘ 今回は簡易的にベースページがアクティブな状態からテキストを書き換えます
Else
Set targetPage = basePage
End If

targetPage.Activate

‘ — テキストシェイプの書き換え処理 —
On Error GoTo ErrorHandler

‘ 氏名の流し込み
targetPage.Shapes.FindShape(“txtNamae”).Text.Story.Contents = rawData(i, 0)

‘ 役職の流し込み
targetPage.Shapes.FindShape(“txtTitle”).Text.Story.Contents = rawData(i, 1)

‘ 部署の流し込み
targetPage.Shapes.FindShape(“txtDepartment”).Text.Story.Contents = rawData(i, 2)

Next i

MsgBox “データの差し込みが完了しました! 生成されたページ数: ” & doc.Pages.Count, vbInformation
Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました。指定した名前のオブジェクト(txtNamae等)がレイアウト内に存在するか確認してください。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical
End Sub

—

4. コードの深掘り解説:ここがエンジニアの急所

初心者から一歩抜け出すために、上記のコードで絶対に押さえておくべきポイントを解説します。

① `FindShape` による名指し指定

targetPage.Shapes.FindShape(“txtNamae”).Text.Story.Contents = “山田 太郎”

従来の「何番目のオブジェクト」という指定方法(例: `Shapes(1)`)は、デザインのレイアウト変更やオブジェクトの重なり順(Zオーダー)が変わった瞬間に崩壊します。
`FindShape(“オブジェクト名”)` を使うことで、「名前で探す」ことが可能になり、メンテナンス性が劇的に向上します。これがプロの技です。

② `.Text.Story.Contents` の意味

CorelDRAWでテキストを操作する場合、単なる `Shape.Text` ではなく、文章全体を内包する `Story` オブジェクトに対して文字列(`Contents`)を代入するのが最も確実です。フォントやサイズなどの書式を維持したまま、中身のテキストだけを綺麗に入れ替えることができます。

—

5. 陥りやすいエラーと実務での注意点

実際にこのシステムを業務に組み込む際、多くの人が以下の壁にぶつかります。事前に知っておけば怖くありません。

1. 「オブジェクトが見つからない」エラー(ランタイムエラー)

  • 原因: Excelのデータ行数分ループしている最中に、テンプレート側で `txtNamae` という名前のテキストフレームをうっかり削除してしまったり、スペルミスをしている場合。
  • 対策: エラーハンドラー(`On Error GoTo`)を必ず仕込み、どのデータのどの項目でコケたのかをログに残せるようにしておきましょう。

2. フォントの置換・文字化け問題

  • 外部から流し込む際、CorelDRAW側にインストールされていないフォントを指定すると、デフォルトフォントに勝手に置き換わり、レイアウトが崩れます。差し込み用テキストのフォントは、事前に「どの環境でも入っている標準フォント」または「アウトライン化の必要がない共通フォント」に固定しておきましょう。

—

おわりに:ここをクリアすれば、CorelDRAW VBAの基本はバッチリです!

お疲れ様でした!今回はCorelDRAW VBAを使った実用的なデータバインディングの基本を駆け足で解説しました。

「デザインは人間のクリエイティビティに任せ、単純な文字の流し込みやフォーマット変換はプログラムに泥臭く働かせる」
この分業体制が作れるようになると、あなたのデザイン業務の生産性は文字通り「桁違い」になります。

今回のコードをベースに、次は「Excelファイル(.xlsx)を直接ADOやファイルシステムオブジェクトで読み込む形」に拡張してみてください。あなたの業務を自動化する最強の武器になるはずです。

それでは、次回の極限の知見でお会いしましょう。良き自動化ライフを!

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