【入門編】【初心者向け】描画されたデザインのアートボード外にはみ出している不要なゴミオブジェクトを自動検知して削除するクリーンアップマクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して操作を再現するだけの日々は、もうおしまいです。今日からあなたも、CorelDRAWの内部エンジンを自在に操る「自動化エンジニア」への第一歩を踏み出します。

印刷入稿やクライアントへのデータ納品直前、「アートボード(ページ)の外側に、いつの間にか小さなゴミオブジェクトや迷子になった点(Stray Points)が残っていた……!」というヒヤッとする経験はありませんか?

手作業で画面をズームアウトして、隅々まで目を凝らして探すのは時間の無駄ですし、何よりプロの仕事ではありません。

今回は、そんな「カンバス外の不要なゴミオブジェクトをワンクリックで一網打尽にするクリーンアップマクロ」の作り方を、優しく徹底解説します。ここをクリアすれば、CorelDRAW VBAの基本オブジェクト操作はバッチリです!

—

なぜ「ゴミオブジェクト」が生まれるのか?

CorelDRAWでデザイン作業をしていると、以下のような「意図しない存在」がドキュメントの隅に生まれがちです。

1. 画面外へのパスの飛び出し: 勢い余ってアートボード(ページ境界)の外に配置してしまったオブジェクト。
2. 孤立点(Stray Points): パスツール等でクリックしたものの、線を繋げずに放置してしまった「点」だけの見えないオブジェクト。
3. 不要なクリップボードの残骸: 貼り付け時にズレて外側に落ちた微小なオブジェクト。

これらはファイルサイズを無駄に肥大化させ、PDF変換やRIP処理(印刷機へのデータ送信)の際に思わぬエラーを引き起こす原因になります。これをVBAで美しく掃除しましょう。

—

開発の全体像:マクロのロジックを理解する

CorelDRAW VBAでオブジェクトを操作する基本は、「アクティブなページにあるすべてのシェイプ(図形)をひとつずつ取り出し、条件に合致するか判定して処理する」というループ構造です。

今回の判定基準はとてもシンプル。

  • 「オブジェクトの重心(あるいはバウンディングボックス)が、ページの幅・高さの外側にあるか?」

これをコードに翻訳していきます。

—

実装コード:一網打尽クリーンアップマクロ

以下のコードを、CorelDRAWのVBAエディタ(`Alt + F11` で起動)の標準モジュールにコピー&ペーストしてください。

Sub CleanupOutsideObjects()
‘ —————————————————-
‘ 描画範囲外の不要なオブジェクトを自動削除するマクロ
‘ —————————————————-

Dim sr As ShapeRange
Dim sh As Shape
Dim pageW As Double, pageH As Double
Dim deletedCount As Long

‘ 1. 処理の高速化と画面描画のロック(※プロの常道テクニック)
EventsEnabled = False
ActiveDocument.BeginCommandGroup “アートボード外のゴミ削除”

On Error GoTo ErrorHandler ‘ エラー時の安全装置

‘ 2. 現在アクティブなページの「幅」と「高さ」を取得する
pageW = ActivePage.CustomWidth
pageH = ActivePage.CustomHeight

‘ 3. アクティブページ上のすべてのシェイプを対象に取得
Set sr = ActivePage.Shapes.All
deletedCount = 0
ひとつずつ確認
For Each sh In sr
‘ ガイドラインやレイヤー自体は削除対象外にするためのガード条件
If Not sh.IsGuide Then

‘ 【判定ロジック】
‘ オブジェクトの中心座標(CenterX, CenterY)が、
‘ ページの外側(X < 0 または X > ページ幅、Y < 0 または Y > ページ高)にあるか?
‘ ※CorelDRAWの原点(0,0)はデフォルトで左下です

If sh.CenterX < 0 Or sh.CenterX > pageW Or sh.CenterY < 0 Or sh.CenterY > pageH Then

‘ 条件に一致した(=ページの外にある)オブジェクトを削除
sh.Delete
deletedCount = deletedCount + 1

End If

End If
Next sh

‘ 4. 正常終了の処理
ActiveDocument.EndCommandGroup
EventsEnabled = True

‘ 完了メッセージを表示
MsgBox “クリーンアップが完了しました!” & vbCrLf & _
“削除された不要オブジェクト数: ” & deletedCount & “個”, _
vbInformation, “自動化完了”

Exit Sub

ErrorHandler:
‘ 万が一エラーが起きた場合の安全復帰処理
EventsEnabled = True
ActiveDocument.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

コードの注目ポイント(ここがプロの知見!)

初心者の方がマクロを書くときに見落としがちな、「エンジニアとしてのこだわり」がこのコードには詰まっています。

1. `EventsEnabled = False` による爆速化

CorelDRAWは、オブジェクトを1つ消すごとに「画面を再描画しなきゃ!」と裏で必死に処理をしています。オブジェクトが数百個あると、これだけで画面がチラつき、処理が数秒〜数十秒遅くなります。
処理の最初にイベントを止め、最後に復帰させることで、一瞬で処理が終わるプロの挙動を実現しています。

2. `ActivePage.CustomWidth / CustomHeight` の活用

CorelDRAWでは、ページサイズはドキュメント設定によって様々です。ハードコーディング(数値を直接書き込むこと)せず、現在のページサイズを動的に取得することで、どんなサイズのアートボードでもこのマクロが通用します。

3. `sh.IsGuide` による安全保護

もしデザイン上に「ガイドライン」や「基準線」が置かれていた場合、これらも `Shape` として判定されてしまうことがあります。ガイドラインをうっかり削除してしまわないよう、`If Not sh.IsGuide Then` というプロテクトを入れるのが実務における鉄則です。

—

陥りやすいエラーと注意点

  • 原点(座標系)の位置に注意!

CorelDRAWのデフォルトの座標系は、「左下」が `(0, 0)` です。そのため、右方向はプラス、上方向もプラスになります。もし環境設定で原点を変更している場合は、判定条件の数値を調整する必要がありますが、まずは標準の左下原点環境でお試しください。

  • 「グループ化」されたオブジェクトの扱い

グループの中にアートボードを跨いでいるものがある場合、グループ全体の中心座標を基準に判定されます。「一部だけ外に出ているもの」を完全にバラして消したい場合は、事前にグループ解除のステップを入れるなどの応用が必要になります。まずは「完全に外に取り残された孤立オブジェクト」を消す基本形として使いこなしてください。

—

まとめ

お疲れ様でした!これであなたも、CorelDRAWのVBAを使って「目に見えないゴミ」を瞬時に掃除する自動化システムを手に入れました。

マクロの記録から一歩進み、自分自身でコードの意図を理解して組み立てる感覚は、プログラミングの最大の醍醐味です。このコードをベースに、さらに「指定サイズ以下の極小オブジェクトだけを狙い撃ちで消す」といった条件を追加していけば、あなただけの最強の入稿前チェッカーが完成します。

ここをクリアできれば、CorelDRAW VBAの基本はバッチリです。ぜひ明日の実務から取り入れて、作業効率を劇的に跳ね上げてください!

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