【入門編】【初心者向け】アートボード上に散らばる未整理のベクター図形を一発で整列させ、指定マージンでキレイに並べ替える配置自動化マクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAWの自動化の世界へようこそ。
チーフアーキテクトの私です。

デザインの制作現場で、こんなイライラを感じたことはありませんか?
「あっちこっちに散らばったアイコンやロゴのパーツを、一つずつ手動で等間隔に並べるのに何分もかかっている…」
「マクロの記録をしてみたけれど、選択したオブジェクトの数やサイズが変わると、途端に位置がズレて使い物にならない……」

もしあなたが「マクロの記録」という名の安全地帯から抜け出し、本当の意味でCorelDRAWを意のままに操りたいと感じているなら、ここが最高のスタート地点です。

今回は、アートボード上に散らばった無数のベクター図形を一網打尽にし、計算ロジックの力で美しくグリッド状に整列させる「配置自動化マクロ」の作り方を、基礎から徹底的に解説します。

ここをクリアすれば、CorelDRAW VBAの基本はバッチリですよ。さあ、一緒にプロの扉を開きましょう!

—

なぜ「マクロの記録」ではダメなのか?

CorelDRAWには便利な「マクロの記録」機能があります。しかし、これで作られるコードは、いわば「その場の座標を記憶しただけの固定化された指示書」にすぎません。

例えば、「X座標 100mm の位置に動かす」というコードは、オブジェクトが3つに増えようが、違うサイズの素材になろうが、常に同じ場所へ強制移動させようとします。これでは実務で使えませんよね。

プロのVBAエンジニアは、「現在の選択状態を把握し、そこから数学的な計算(アルゴリズム)によって動的に座標を導き出す」コードを書きます。

今回作成するマクロの頭脳は、まさにこの「計算ロジック」です。

—

実装する自動整列マクロの全容

まずは、実際にあなたが開発環境(VBAエディタ)にコピペして、そのまま動かせる実用コードをお見せします。

このコードは、選択した複数の図形を「指定した列数」で折り返し、綺麗なグリッド状(格子状)に並べ替える魔法のようなスクリプトです。

Sub GridAlignShapes()
‘ ==========================================
‘ ベクター図形グリッド整列自動化マクロ
‘ Designed by Chief Architect
‘ ==========================================

‘ エラーハンドリングの基本:画面描画を一旦止めて爆速化する
ActiveDocument.BeginCommandGroup
EventsEnabled = False

On Error GoTo ErrorHandler

‘ 1. 何も選択されていない場合のガード節
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “整列させたいオブジェクトを一つ以上選択してください。”, vbExclamation, “警告”
GoTo Finally
End If

‘ 2. ユーザー設定パラメータ(必要に応じて変更してください)
Dim maxColumns As Integer
maxColumns = 4 ‘ 1行あたりに並べる最大数

Dim marginX As Double
Dim marginY As Double
marginX = 10 ‘ 横方向の間隔 (mm)
marginY = 10 ‘ 縦方向の間隔 (mm)

‘ CorelDRAWの内部単位をミリメートルに固定
Dim origUnit As cdrUnit
origUnit = ActiveDocument.Unit
ActiveDocument.Unit = cdrMillimeter

‘ 3. 配置計算用の変数を定義
Dim sh As Shape
Dim index As Integer
Dim col As Integer
Dim row As Integer

Dim startX As Double
Dim startY As Double

‘ 基準となる最初のオブジェクトの左上座標を取得
‘ (選択されたグループ全体の最初のシェイプを基準にします)
Dim firstShape As Shape
Set firstShape = ActiveSelection.Shapes(1)
startX = firstShape.LeftX
startY = firstShape.TopY

Dim cellWidth As Double
Dim cellHeight As Double
cellWidth = 0
cellHeight = 0

‘ 4. 選択された全シェイプの最大サイズを割り出す(グリッドの枠サイズ決定)
For Each sh In ActiveSelection.Shapes
If sh.SizeWidth > cellWidth Then cellWidth = sh.SizeWidth
If sh.SizeHeight > cellHeight Then cellHeight = sh.SizeHeight
Next sh

‘ 5. メインループ:計算と再配置の実行
index = 0
For Each sh In ActiveSelection.Shapes
‘ 何列目、何行目かを割り出す(割り算の余りと商のテクニック)
col = index Mod maxColumns
row = index \ maxColumns

‘ 新しい座標を計算し、シェイプを移動
‘ ※CorelDRAWのY座標は上がプラス、下がマイナスになる点に注意
sh.LeftX = startX + (col (cellWidth + marginX))
sh.TopY = startY – (row (cellHeight + marginY))

index = index + 1
Next sh

Finally:
‘ 単位を元に戻す
ActiveDocument.Unit = origUnit
EventsEnabled = True
ActiveDocument.EndCommandGroup
Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
Resume Finally
End Sub

—

コードの核心を読み解く:3つの重要ポイント

初心者の方が「おっ」と驚き、今後のVBA人生で強力な武器になるポイントを3つに絞って解説します。

① 画面描画のロック (`EventsEnabled = False`)

大量のオブジェクトを一瞬で動かすとき、CorelDRAWは「1つ動かすごとに画面を再描画」しようとします。これが処理を激重にする原因です。
処理の最初に `EventsEnabled = False` と `BeginCommandGroup` を挟み、最後に元に戻すことで、爆発的な処理速度の向上を実現しています。プロの現場では必須のテクニックです。

② 単位の安全管理 (`ActiveDocument.Unit`)

CorelDRAWは、ユーザーの設定によって「インチ」「ミリ」「ピクセル」など単位がバラバラになります。
コード内で `10` と書いたとき、それがインチなのかミリなのか、環境によって変わってしまってはバグの元です。
コードの最初で強制的に `cdrMillimeter`(ミリメートル)へ変更し、処理の最後に元の単位へ復元する。この「環境に依存しない堅牢さ」がプロのコードです。

③ 余りと商を使ったグリッド計算 (`Mod` と `\`)

ここが数学的な美しさのハイライトです。

col = index Mod maxColumns ‘ 列番号 (0, 1, 2, 3, 0, 1…)
row = index \ maxColumns ‘ 行番号 (0, 0, 0, 0, 1, 1…)

コンピュータに「左から右へ並べ、端まで来たら次の行へ落とす」という動作をさせるために、割り算の余り(`Mod`)と整数除算(`\`)を使っています。オブジェクトが何個あっても、この数式が完璧に綺麗な格子状の座標を弾き出してくれます。

—

陥りがちな罠:CorelDRAW特有の座標系に注意!

ここで、CorelDRAW VBA初心者が100%ハマる「座標の罠」についてお伝えしておきます。

一般的なペイントソフトやWebデザイン(CSSなど)では、画面の「左上」が `(X:0, Y:0)` で、下に行くほどY座標がプラスになりますよね。

しかし、CorelDRAWのページ座標は、左上が原点ではなく、ページの「中心」あるいはページの「左下」が基準になり、さらにY軸は「上方向がプラス」という数学的なデカルト座標系を採用しています。

今回のコードで `sh.TopY = startY – (row …)` と、引き算を使っているのはそのためです。行が下に進むにつれて、Y座標の値を小さく(下へ)しなければならないためです。この仕様を知っているだけで、デバッグの時間が何時間も浮きますよ。

—

まとめ:自動化の第一歩を踏み出そう

今回は、散らばったベクター図形を美しく整列させる自動化マクロを通じて、以下の重要な知見を解説しました。

  • 「マクロの記録」を脱却し、動的な計算ロジックを組む重要性
  • 処理を爆速化する画面描画の制御とエラーハンドリング
  • CorelDRAW独自の単位系と、Y座標の向きの罠

このコードをあなたのCorelDRAWのVBAエディタ(`Alt + F11`)に貼り付け、適当な図形をいくつか選んで実行してみてください。一瞬で綺麗に整列したときの快感は、エンジニアだけの特権です。

ここをクリアしたあなたなら、次は「レイヤーごとに仕分けする」「自動で色を変える」といった、さらなる高度な自動化へ進む実力が十分についています。

あなたのCorelDRAWライフが、よりクリエイティブで快適なものになりますように。
それでは、次の建築現場(コードの海)でお会いしましょう!

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