こんにちは!CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身がよくわからない……」というモヤモヤを抱えていませんか?
今回は、そんな初心者の方に向けて、CorelDRAW VBAの基本と「オブジェクトを自在に操る楽しさ」を同時に味わえる、ちょっと遊び心のあるマクロを作ってみましょう。
テーマは「選択した複数のベクターシェイプに、ランダムなカラーパレットを自動割り当てする魔法のスクリプト」です。
デザインのモックアップを作るとき、「ここに並んだたくさんの図形、一つずつ色を選んで塗るの面倒だな……」と思ったことはありませんか? このマクロがあれば、一瞬でカラフルなアートに生まれ変わります。ここをクリアすれば、CorelDRAW VBAの基本はバッチリですよ! 一緒に一歩を踏み出しましょう。
—
1. なぜ「マクロの記録」だけでは限界があるのか?
CorelDRAWには「マクロの記録」機能がありますが、これだけで複雑な処理を行おうとすると、どうしても限界が来ます。
なぜなら、記録機能は「自分が画面上でマウスをどう動かしたか」を記憶するだけで、「もし〇個選択されていたら〜」「ランダムに色を変える」といった「条件分岐」や「計算」ができないからです。
VBA(Visual Basic for Applications)を使うと、CorelDRAWに対して「今、選択されているものリスト(Selection)」を直接渡し、プログラム側で計算して一括命令を出すことができます。これが、手作業とは比較にならない爆速の自動化を生み出す秘密です。
—
2. 今回のマクロの設計図(アルゴリズム)
コードを書く前に、頭の中で「コンピューターに何をさせるか」の段取りを整理しましょう。
1. チェックする: 何も選択していなかったら、エラーを出さずに優しくストップする。
2. パレットを用意する: あらかじめ「使いたい色(RGB値)」の配列(カラーパレット)を頭の中に用意しておく。
3. ループする: 選択されているオブジェクトを1つずつ順番に取り出す。
4. ランダムに塗る: 用意したパレットの中から、サイコロを振るようにランダムに色を選び、オブジェクトの「塗り(Fill)」に適用する。
たったこれだけです。それでは、実際のコードを見てみましょう。
—
3. 実装コード:ランダム・カラー・ジェネレーター
CorelDRAWのVBAエディタ(`Alt + F11`で開けます)を開き、標準モジュールに以下のコードを貼り付けてください。
Sub ApplyRandomPalette()
‘ —————————————————-
‘ 選択中の複数シェイプにランダムなカラーを割り当てるマクロ
‘ —————————————————-
‘ 1. エラー対策:何も選択されていない場合は処理を中断する
If ActiveSelection.Shapes.Count = 0 Then
MsgBox “色を塗りたいオブジェクトをいくつか選択してくださいね!”, vbExclamation, “おっとっと”
Exit Sub
End If
‘ 2. カラーパレットの定義(RGB値の配列を作成)
‘ ここではポップで使いやすい5つの色を準備しました(お好みで変更可能!)
Dim colorPalette(4) As Long
colorPalette(0) = RGB(255, 107, 107) ‘ コーラルレッド
colorPalette(1) = RGB(78, 205, 196) ‘ ターコイズ
colorPalette(2) = RGB(247, 255, 37) ‘ サンイエロー
colorPalette(3) = RGB(199, 244, 100) ‘ ライムグリーン
colorPalette(4) = RGB(150, 111, 214) ‘ ラベンダーパープル
‘ 乱数のシードを初期化(毎回違うランダム結果にするため)
Randomize
‘ 3. 選択されているオブジェクトをひとつずつループ処理
Dim sh As Shape
Dim randomIndex As Integer
‘ 画面描画を一時停止することで、処理スピードを爆発的に上げる(プロのテクニック!)
ActiveDocument.BeginCommandGroup
EventsEnabled = False
For Each sh In ActiveSelection.Shapes
‘ 塗りつぶしが可能なオブジェクトかチェック(曲線や矩形など)
If sh.Type = cdrShapeType Then ‘ またはシェイプが塗りを持てるか
‘ 0から4までの整数をランダムに生成
randomIndex = Int((UBound(colorPalette) – LBound(colorPalette) + 1) Rnd + LBound(colorPalette))
‘ オブジェクトの塗りを有効にし、ランダムに選んだ色を適用
sh.Fill.ApplySolidFill
sh.Fill.UniformColor.RGB = colorPalette(randomIndex)
‘ おまけ:輪郭線(アウトライン)をなしにする(すっきり見せるため)
sh.Outline.Type = cdrNoOutline
End If
Next sh
‘ 画面描画の再開
EventsEnabled = False
ActiveDocument.EndCommandGroup
‘ 4. 完了メッセージ
MsgBox “ランダムカラーの適用が完了しました!”, vbInformation, “完了”
End Sub
—
4. コードの注目ポイント(ここが分かれば怖くない!)
初心者の方が「おっ」と思うポイントをいくつか解説します。
① `ActiveSelection.Shapes` の強力さ
CorelDRAW VBAでは、いま画面上で選択しているものたちを `ActiveSelection` というオブジェクトで一網打尽に掴むことができます。さらに `For Each` という構文を使うことで、「選択されたやつらを、先頭から順番に処理してね」という人間の言葉に近い感覚でコードが書けます。
② プロの技:`BeginCommandGroup` と画面描画の停止
もし選択しているオブジェクトが1,000個あったらどうでしょう? 1つ色を変えるたびに画面がパチパチ再描画されると、処理が非常に遅くなります。
`EventsEnabled = False` や `BeginCommandGroup` を挟むことで、裏側で一瞬にして計算を終わらせ、最後にドンと画面を更新させることができます。これが数ミリ秒を削るプロエンジニアのこだわりです。
③ 乱数生成の仕組み (`Rnd` 関数)
VBAの `Rnd` は 0 以上 1 未満の小数を返します。これにパレットの数(今回は5つ)を掛け算し、`Int` 関数で小数点以下を切り捨てることで、`0, 1, 2, 3, 4` の整数を作り出しています。これが配列のインデックス番号と綺麗に噛み合うわけです。
—
5. 初心者が陥りやすい罠とエラー回避のコツ
マクロを動かしていると、時々こんな壁にぶつかります。
- エラー:「オブジェクトが必要です」と言われる
- 原因: 選択している中に、塗りつぶしができない特殊なオブジェクト(テキストフレームやグループ化された親要素など)が含まれている場合に起こることがあります。
- 対策: まずはシンプルな「四角形」や「丸」を複数個並べて、グループ化せずに(バラバラの状態で)選択してテストしてみてください。
- 色がいつも同じパターンになる
- 原因: コード内に `Randomize` を入れ忘れていると、VBAは毎回同じ乱数のパターンのまま実行してしまいます。必ずループの前に `Randomize` を仕込みましょう。
—
まとめ
いかがでしょうか?
今回はCorelDRAW VBAの基本(オブジェクトの選択、配列、ループ、プロパティの変更)がギュッと詰まった実用的なマクロをご紹介しました。
コードを少し書き換えて、パレットの色を増やしたり、お気に入りのブランドカラーに差し替えたりするだけでも、自分だけの強力なデザインツールに進化します。
「手作業で繰り返す退屈な仕事はプログラムに任せ、自分はクリエイティブな発想に集中する」――これこそが自動化の醍醐味です。
ぜひあなたのCorelDRAW環境でも試してみてくださいね。次のステップでお会いしましょう!
