【入門編】【中級者向け】コーポレートカラーの厳密な統制!指定された特定色(スポットカラー)以外の使用を禁止し、違反箇所を赤枠でハイライトする監査マクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押して出てきたコードをそのまま動かすだけのステージから、一歩先へ進みたいあなたへ。

今日は、プロの現場で絶対に避けて通れない「コーポレートカラーの厳密な統制」をテーマに、ドキュメント内の色彩を完全に監査し、ブランドガイドライン違反のカラーをあぶり出して赤枠で警告する、実用的な監査マクロの作り方を徹底解説します。

ここをクリアすれば、CorelDRAW VBAのオブジェクト構造の本質がグッと見えてきますよ。さあ、一緒にプロの扉を開きましょう!

なぜ「色の統制」をVBAで自動化する必要があるのか?

企業のロゴやブランドカラーは、企業の「顔」です。しかし、大規模なDTPの現場では、デザイナーのうっかりミスや、外部から持ち込まれた素材によって、微妙に色味が異なるRGBカラーや、指定外のスポットカラー(特色)が混入しがちです。

これを人間の目だけで全ページチェックするのは、時間的にも精神的にも地獄の作業ですよね。
だからこそ、「指定された許可カラー以外はすべて悪」とみなし、機械的に検知して視覚化するマクロが必要なのです。

CorelDRAW VBAにおける「色(Color)」の深淵

初学者がまずハマる罠が、「CorelDRAWの色は一筋縄ではいかない」という点です。
CorelDRAWでは、オブジェクトの色は主に以下の2箇所に存在します。

1. 塗り(Fill): `Shape.Fill.UniformColor` など
2. 輪郭(Outline): `Shape.Outline.Color` など

さらに、色は「RGB」「CMYK」「パレットカラー(スポットカラー)」など、多様な色空間を持っています。今回の監査マクロでは、「指定した正確なパレットカラー(または特定の値)と完全に一致するかどうか」を判定するロジックを組む必要があります。

実装:ブランドカラー監査&ハイライトマクロ

それでは、実際にCorelDRAWのVBAエディタ(Alt + F11)に貼り付けて即座に使える、プロ仕様の監査コードを公開します。

このコードは、アクティブなドキュメント内の全シェイプを巡回し、許可されていないカラーを使っているオブジェクトを発見した場合、その周囲に「警告用の赤い枠(ハイライト)」を自動生成します。

‘ ==============================================================================
‘ チーフアーキテクトが贈る:コーロペレートカラー厳密監査マクロ
‘ ==============================================================================
Sub AuditCorporateColors()
Dim sr As ShapeRange
Dim sh As Shape
Dim allowedColor As New Color
Dim violationCount As Long

‘ 画面描画を停止してパフォーマンスを極限まで引き上げる(重要!)
EventsEnabled = False
ActiveDocument.BeginCommandGroup “ブランドカラー監査”

On Error GoTo ErrorHandler

‘ 【設定】ここで「許可するブランドカラー」を定義します
‘ 例として、C=100, M=0, Y=0, K=0 (シアン100%) を許可カラーとします
allowedColor.CMYKAssign 100, 0, 0, 0

‘ ドキュメント内のすべてのシェイプを取得(グループ内も再帰的に走査)
Set sr = ActiveDocument.Pages.DrawnShapes
violationCount = 0

For Each sh In sr
‘ ガイドラインやレイヤー自体、あるいは今回生成する警告枠を除外する判定をここに挟むとより実用的です
If Not sh.Locked And Not sh.Printable = False Then

Dim isViolation As Boolean
isViolation = False

‘ 1. 塗りのチェック(単色塗りの場合のみ)
If sh.Fill.Type = cdrUniformFill Then
If Not IsColorMatch(sh.Fill.UniformColor, allowedColor) Then
isViolation = True
End If
End If

‘ 2. 輪郭のチェック
If sh.Outline.Type <> cdrNoOutline Then
If Not IsColorMatch(sh.Outline.Color, allowedColor) Then
isViolation = True
End If
End If

‘ 違反が見つかった場合の処理
If isViolation Then
violationCount = violationCount + 1
Call MarkViolation(sh)
End If

End If
Next sh

ActiveDocument.EndCommandGroup
EventsEnabled = True

‘ 結果報告
MsgBox “監査完了しました。” & vbCrLf & _
“ブランドカラー違反箇所: ” & violationCount & “件”, _
vbInformation, “カラー統制システム”

Exit Sub

ErrorHandler:
EventsEnabled = True
ActiveDocument.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

‘ ==============================================================================
‘ 2つの色が一致するかを厳密に判定するヘルパー関数
‘ ==============================================================================
Private Function IsColorMatch(c1 As Color, c2 As Color) As Boolean
‘ 色空間(CMYK, RGBなど)が異なる場合は不一致とする
If c1.Type <> c2.Type Then
IsColorMatch = False
Exit Function
End If

‘ 色空間に応じた厳密な数値比較
Select Case c1.Type
Case cdrColorCMYK
If c1.CMYKCyan = c2.CMYKCyan And _
c1.CMYKMagenta = c2.CMYKMagenta And _
c1.CMYKYellow = c2.CMYKYellow And _
c1.CMYKBlack = c2.CMYKBlack Then
IsColorMatch = True
Else
IsColorMatch = False
End If

Case cdrColorRGB
If c1.RGBRed = c2.RGBRed And _
c1.RGBGreen = c2.RGBGreen And _
c1.RGBBlue = c2.RGBBlue Then
IsColorMatch = True
Else
IsColorMatch = False
End If

‘ スポットカラー(パレットカラー)の場合は名前やIDで比較
Case cdrColorSpot
If c1.Name = c2.Name Then
IsColorMatch = True
Else
IsColorMatch = False
End If

Case Else
‘ その他の複雑な色空間は安全のため不一致扱い
IsColorMatch = False
End Select
End Function

‘ ==============================================================================
‘ 違反オブジェクトの周囲に赤い警告枠を生成するプロシージャ
‘ ==============================================================================
Private Sub MarkViolation(targetShape As Shape)
Dim b Asவனாக
Dim rect As Shape

‘ ターゲットのバウンディングボックス(外接矩形)を取得
Dim l As Double, t As Double, w As Double, h As Double
targetShape.GetBoundingBox l, t, w, h

‘ 少し余裕を持たせた赤い枠を作成
Set rect = ActiveLayer.CreateRectangle(l – 2, t + 2, l + w + 2, t – h – 2)

With rect
.Fill.NoFill
.Outline.Width = 0.5 ‘ 0.5mmの細い枠
.Outline.Color.CMYKAssign 0, 100, 100, 0 ‘ 鮮やかな赤 (C0 M100 Y100 K0)
.Locked = True ‘ 誤操作で動かないようにロック
End With
End Sub

コードの重要ポイントと「プロの知見」

ここで、コードの裏側にある「CorelDRAWを極めるための重要概念」をいくつか解説しておきます。

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

大量のオブジェクトをVBAでループ処理する際、CorelDRAWは画面の再描画やイベント監視を行おうとするため、動作が非常に重くなります。処理の最初に `EventsEnabled = False`(画面更新の抑制)を挟み、最後に `True` に戻す。これは、プロのエンジニアが必ず仕込む鉄則のパフォーマンス・ハックです。

2. バウンディングボックスを活用した視覚化

`MarkViolation` プロシージャでは、違反したシェイプの正確な位置とサイズ(バウンディングボックス)を取得し、その周囲に赤い枠を重ねています。これにより、デザイナーは「どこが」「どのオブジェクトで」違反しているのかを、ドキュメント上で一目で特定できるようになります。

3. トランザクション管理 (`BeginCommandGroup`)

`ActiveDocument.BeginCommandGroup` を使うことで、マクロの一連の動作を「ひとつの操作」としてCorelDRAWの履歴に登録できます。これにより、マクロ実行後に「Ctrl + Z」を1回押すだけで、生成された赤い警告枠をすべて一気に一発で消去できるようになります。ユーザーフレンドリーな配慮ですね。

陥りやすいエラーと対策

  • エラー:オブジェクトがグループ化されている場合に見落とされる?
  • `ActiveDocument.Pages.DrawnShapes` は、グループの階層の深さに関わらず、ドキュメント上のすべての描画シェイプをフラットに取得してくれます。そのため、グループ化された中のパーツであっても漏れなく検知可能です。
  • エラー:文字(テキスト)の色が変わらない?
  • アートisticテキストやパラグラフテキストの場合、文字単位で個別に色が設定されている(リッチテキスト状態な)ケースがあります。完全に厳密な統制を行いたい場合は、テキストシェイプの `Text.Story` に対する走査も組み合わせる必要がありますが、まずは上記の基本形をマスターしましょう。

まとめ

今回は、コーポレートカラーの厳密な統制を行う監査マクロを通じて、オブジェクトの走査、色判定のロジック、そしてパフォーマンスチューニングの基本を解説しました。

ここをクリアできれば、単なる「操作の自動化」を超えた、「デザインの品質を担保するシステム」をCorelDRAW上で構築できるようになります。

あなたのデザインワークフローを、もっと知的で、もっとスマートに。
次回の解説もお楽しみに!

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