【入門編】【初心者向け】選択した複数のベクターシェイプにランダムなカラーパレットを自動割り当てする遊び心のあるマクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!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環境でも試してみてくださいね。次のステップでお会いしましょう!

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