こんにちは! CorelDRAW VBAの世界へようこそ。
日々、画面上でマウスをカチカチと動かしながら「このバラバラの図形たちを、一瞬で綺麗に並べられたらどんなに楽だろう……」と思ったことはありませんか?
マクロの記録ボタンを押して操作を覚えさせるのも手ですが、実は「座標の計算」を少しだけコードで書いてあげるだけで、どんなに散らばったオブジェクトでも、あなた好みの美しいグリッド(格子状)に一瞬で整列させることができます。
今回は、プログラミング初学者の方でも安心して一歩を踏み出せるように、CorelDRAW VBAの基本から、実務で即戦力になる「自動グリッド整列マクロ」の作り方まで、優しく丁寧にお伝えしていきますね。ここをクリアすれば、あなたのCorelDRAW自動化スキルは間違いなく一段階アップしますよ!
—
なぜ「自動グリッド整列」なのか?
CorelDRAWには標準で「整列と配置」ドッキングウィンドウがありますよね。あれも非常に便利です。しかし、次のようなシチュエーションではどうでしょうか?
- 大量のアイコンやバリエーション素材を、横に5個ずつ・マージンを均等に空けて並べたい
- 顧客から支給されたバラバラのロゴデータを、一定のルールでマトリクス状に整理したい
手動でやると、位置のズレを直すだけで何十分も消えてしまいます。これをVBA(Visual Basic for Applications)にお願いすれば、ボタンひとつで0.1秒足らずで完了します。コンピュータの得意な「計算」を味方に付けましょう。
—
CorelDRAW VBAの基本作法
まずは、CorelDRAWでVBAを動かすための「お約束」をサクッと確認しておきましょう。
1. Alt + F11 キーを押して、VBAエディタ(IDE)を開く。
2. 左側のプロジェクトツリーから「GlobalMacros」などを右クリックし、`[挿入]` > `[標準モジュール]` を選択する。
3. 出現した白いキャンバスにコードを書き込む。
これだけです。準備ができたら、いよいよ今回のメインである「グリッド整列マクロ」の全コードを見ていきましょう。
—
実用コード:オブジェクト自動グリッド整列マクロ
以下のコードを、あなたのVBAエディタの標準モジュールにそのまま貼り付けてみてください。
Sub AutoArrangeGrid()
‘ ==========================================
‘ テーマ: 選択図形を指定マージンでグリッド状に自動整列
‘ 執筆者: チーフアーキテクト先輩
‘ ==========================================
‘ 1. エラーハンドリングの基本:選択オブジェクトがない場合の対策
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “整列させたい図形を画面上で選択してください。”, vbExclamation, “エラー”
Exit Sub
End If
‘ 2. グリッドの設定値(単位はCorelDRAWのデフォルト設定に依存:通常はミリメートルなど)
Dim maxColumns As Integer
Dim marginX As Double
Dim marginY As Double
maxColumns = 4 ‘ 横に並べる最大個数
marginX = 10 ‘ 図形同士の横方向の間隔(マージン)
marginY = 10 ‘ 図形同士の縦方向の間隔(マージン)
‘ 3. 変数の定義
Dim sh As Shape
Dim i As Integer
Dim col As Integer
Dim row As Integer
Dim startX As Double
Dim startY As Double
Dim currentX As Double
Dim currentY As Double
Dim cellWidth As Double
Dim cellHeight As Double
‘ 4. 最初に選択した図形の左上の位置を基準(起点)とする
startX = ActiveSelection.Shapes(1).LeftX
startY = ActiveSelection.Shapes(1).TopY
‘ 5. グリッドの「セルサイズ」を決定するため、選択図形の中での最大幅・高さを探す(簡易版として最初の図形を基準にするか、個別対応するか)
‘ ※今回はシンプルに各図形のサイズをそのまま活かすロジックにします
i = 0
For Each sh in ActiveSelection.Shapes
‘ 行(row)と列(col)のインデックスを計算 (0始まり)
col = i Mod maxColumns
row = i \ maxColumns
‘ 配置すべき新しいX座標とY座標を計算
‘ ※CorelDRAWのY座標は上がプラス、下がマイナスになる点に注意!
If i = 0 Then
currentX = startX
currentY = startY
Else
‘ 2つ目以降の配置ロジック(前の図形の右端、あるいはセル幅を考慮)
‘ ここではシンプルに「一定間隔のオフセット」で計算します
‘ 実務では図形ごとの幅(SizeWidth)を累積させるとより美しくなります
End If
‘ 今回は分かりやすく「等間隔グリッド(各セルの左上を揃える)」で実装します
‘ 各シェイプの幅・高さを取得
Dim w As Double, h As Double
w = sh.SizeWidth
h = sh.SizeHeight
‘ グリッドの原点からのオフセット配置
‘ 列が進むごとに右へ、行が進むごとに下へ移動
Dim targetX As Double
Dim targetY As Double
‘ 基準となる最初のシェイプの位置をベースに計算
‘ (※より高度な実装では、全シェイプの最大幅をグリッド幅とします)
i = i + 1
Next sh
‘ — 【実用度を上げたスマート版アルゴリズム】 —
‘ 初学者向けに、もっと直感的で確実に動く「シンプル・オフセット方式」に書き直します。
Dim s As Shape
Dim index As Long
Dim c As Integer, r As Integer
Dim baseX As Double, baseY As Double
Dim xOffset As Double, yOffset As Double
‘ ざっくり安全に動く設定
const COL_COUNT = 4 ‘ 1行に並べる数
const GAP = 5 ‘ 間隔 (mmなど)
index = 0
‘ 最初に選択されている全シェイプをループ
For Each s In ActiveSelection.Shapes
c = index Mod COL_COUNT ‘ 列番号 (0, 1, 2, 3)
r = index \ COL_COUNT ‘ 行番号 (0, 1, 2…)
If index = 0 Then
‘ 基準位置の記録
baseX = s.LeftX
baseY = s.TopY
Else
‘ 2つ目以降:1つ目の位置を基準に、列と行の数だけズラす
‘ (※すべての図形が同じサイズか、大体同じ大きさと仮定した場合の最も美しいアプローチ)
s.LeftX = baseX + (c (s.SizeWidth + GAP))
s.TopY = baseY – (r (s.SizeHeight + GAP))
End If
index = index + 1
Next s
‘ 完了メッセージ
MsgBox index & ” 個のオブジェクトを綺麗にグリッド整列しました!”, vbInformation, “処理完了”
End Sub
—
コードのここがポイント! 丁寧解説
初心者の方が「おっ」と躓きやすいポイントを、エンジニア目線で分かりやすく解説します。
1. `ActiveSelection.Shapes` の強力さ
CorelDRAW VBAでは、現在ユーザーがマウスで選択しているオブジェクト群を `ActiveSelection` というオブジェクトで一網打尽に取得できます。これのおかげで、「今何が選ばれているか」を簡単にプログラムの土俵に上げることができます。
2. 整数除算 `\` と余り `Mod` の魔法
グリッドレイアウト(表計算のような縦横の配置)を作る際になくてはならないのが、この2つの演算子です。
- `index Mod COL_COUNT` :「何列目か(0, 1, 2, 3…)」を算出します。端に来たら0に戻ります。
- `index \ COL_COUNT` :「何行目か(0, 1, 2…)」を算出します。4つを超えると次の行(1)に進みます。
これを知っているだけで、どんな複雑な並べ替えも一瞬でコードに落とし込めるようになります。
3. CorelDRAWならではの座標系トラップ
ここが一番重要です! Excel VBAやWebのCSSなどでは「画面の左上が (0,0) で、下に行くほどYがプラス」になりますよね。
しかし、CorelDRAWの数学的座標系は「左上が基準であっても、Y座標は上にいくほどプラス、下にいくほどマイナス」になります(※ページレイアウトビューの初期設定による)。
そのため、行を下へ進める(つまり画面の下方向へ移動させる)ときは、初期の `TopY` から マイナス(減算) していく必要があります。今回のコードでも `baseY – (r …)` としているのはそのためです。ここを間違えると、図形が上へ上へと飛んでいってパニックになるので要注意です!
—
陥りやすいエラーと対策
- エラー:「オブジェクトが必要です」 (Error 424)
- 原因: 図形を何も選択せずにマクロを実行してしまいました。
- 対策: コードの最初にある `If ActiveSelection.Shapes.Count = 0 Then …` のようなガード節(事前チェック)を必ず入れる癖をつけましょう。
- 図形が重なってしまう
- 原因: 選択した図形たちの大きさがバラバラすぎて、`s.SizeWidth` の計算が意図せぬ挙動をしている可能性があります。
- 対策: まずは「同じ大きさのアイコンや四角形」を複数選択してテストし、慣れてきたら「最大の幅を基準にする」などの応用コードに発展させてみましょう。
—
まとめ
いかがでしたでしょうか?
「アートボード上に散らばる図形をグリッド状に自動整列するマクロ」の仕組みが見えてきたかと思います。
ここをクリアすれば、次は「特定のレイヤーだけに絞る」「自動でグループ化する」「PDF書き出しまでワンストップで行う」といった、より高度な業務自動化の扉が開きます。
面倒な定型作業はマクロにすべて任せて、あなたはクリエイティブで楽しいデザイン業務に集中してくださいね。それでは、次回のCorelDRAW自動化の世界でお会いしましょう!バッチリ使いこなしてくださいね!
