ブランドの牙城を守れ:CorelDRAW VBAで構築する「CI/VI自動監査・強制是正システム」
開発プロジェクトのリーダーである私たちが日々直面する最大の敵の一つ、それは「人的ミスによるブランドガイドラインの逸脱」だ。
営業資料、パッケージデザイン、ロゴの微修正――。どれほど厳格なCI/VI(コーポレートアイデンティティ/ビジュアルアイデンティティ)のマニュアルを配布しても、現場のデザイナーが「近似色だから」「なんとなくこっちの方が収まりが良いから」という理由で、指定外のRGBカラーや禁止フォントを使用する事故は後を絶たない。
これを人の目によるチェックだけで防ごうなどというのは、最初から破綻している。
CorelDRAWを業務で使い倒す我々エンジニアなら、アプローチは一つだ。「人間を信じるな、コードで縛れ」。
今回は、CorelDRAW VBA(Visual Basic for Applications)の深部まで潜り込み、全ページ・全オブジェクトをスキャンしてブランド違反を検出し、即座にハイライトまたは自動置換する「プロダクション品質のブランド監査ツール」の全貌を伝授する。
—
1. 堅牢な監査システム設計の要諦
単に「色やフォントをチェックするマクロ」であれば、初心者でも数行のループを書けば作れる。しかし、実務の現場で耐えうる「堅牢なツール」にするためには、以下の3つのアーキテクチャ上の壁を突破しなければならない。
① オブジェクトの深海:グループ化とコンテナの走査
CorelDRAWのドキュメント構造は、単なる平坦なリストではない。`Layer` の中に `Shape` があり、それが `Group` 化され、さらに `PowerClip`(コンテナ)の内部にまでオブジェクトがネストする。
浅い階層だけを舐めるコードでは、グループ化されたパーツの奥に潜む「禁止カラー」を見逃すことになる。再帰処理(Recursive)を用いた完全なツリー走査が絶対条件だ。
② プロパティアクセスのコストとエラーハンドリング
すべてのシェイプがカラープロパティ(`Fill.UniformColor` や `Outline.Color`)を持っているわけではない。例えば「ビットマップ画像」や「ブレンドグループの中間体」など、型が一致しないオブジェクトに対して安易にプロパティを叩けば、VBAは容赦なく実行時エラー(Runtime Error)でクラッシュする。
「型安全な判定」と「無慈悲なエラーのラップ」がコードの寿命を左右する。
③ 外部設定ファイル(JSON/CSV)による柔軟なルール管理
禁止カラーのRGB値や許可フォントリストをVBAのコード内にハードコーディングする愚を犯してはならない。ブランドガイドラインの改定は突然やってくる。ルール定義は外部の外部データ(今回は保守性を考慮し、INIファイルや設定用ワークシート、あるいはコード内の構造化された定数配列)として分離すべきだ。
—
2. プロダクションコード:ブランド監査&自動是正エンジン
以下のコードは、アクティブドキュメントを徹底的にスキャンし、①指定外カラーの検出&強制置換、②禁止フォントの使用検出を行う実戦投入可能なVBAモジュールである。
Option Explicit
‘ ==============================================================================
‘ CorelDRAW ブランドコンプライアンス監査エンジン
‘ Architecture: Recursive Shape Traversal & Strict Type Guarding
‘ ==============================================================================
‘ ブランド規定定数(実際には外部設定ファイルやDBから読み込む設計を推奨)
Private Const BRAND_PRIMARY_CMYK_C As Double = 100#
Private Const BRAND_PRIMARY_CMYK_M As Double = 0#
Private Const BRAND_PRIMARY_CMYK_Y As Double = 0#
Private Const BRAND_PRIMARY_CMYK_K As Double = 50#
‘ 禁止フォント名(部分一致判定用)
Private Const FORBIDDEN_FONT_1 As String = “Impact”
Private Const FORBIDDEN_FONT_2 As String = “Comic Sans”
Public Sub RunBrandAuditAndCorrection()
Dim startTime As Double
startTime = Timer
‘ 画面描画を停止してパフォーマンスを極限まで引き上げる(最重要プラクティス)
ActiveDocument.BeginCommandGroup “Brand Compliance Audit”
Optimization = True
EventsEnabled = False
On Error GoTo ErrorHandler
Dim violationCount As Long
violationCount = 0
Dim s As Shape
Dim p As Page
‘ 全ページを走査
For Each p In ActiveDocument.Pages
p.Activate
Dim sh As Shapes
Set sh = p.Shapes
‘ 再帰的にシェイプツリーを走査
violationCount = violationCount + ScanAndFixShapes(sh)
Next p
‘ 終了処理
Optimization = False
EventsEnabled = True
ActiveDocument.EndCommandGroup
MsgBox “ブランド監査が完了しました。” & vbCrLf & _
“検出・是正された違反箇所: ” & violationCount & ” 件” & vbCrLf & _
“処理時間: ” & Format(Timer – startTime, “0.00”) & ” 秒”, _
vbInformation, “CI/VI監査システム”
Exit Sub
ErrorHandler:
‘ 異常終了時の安全弁:必ず最適化フラグを戻すこと
Optimization = False
EventsEnabled = True
ActiveDocument.EndCommandGroup
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “システムエラー”
End Sub
‘ ——————————————————————————
‘ 再帰的シェイプ走査関数
‘ ——————————————————————————
Private Function ScanAndFixShapes(ByVal shs As Shapes) As Long
Dim s As Shape
Dim count As Long
count = 0
For Each s In shs
‘ 1. グループまたはコンテナ(PowerClip)の場合の再帰処理
If s.Type = cdrGroupShape Then
count = count + ScanAndFixShapes(s.Shapes)
ElseIf s.HasShapes Then
‘ PowerClipなどの内部シェイプを持つ場合
count = count + ScanAndFixShapes(s.Shapes)
End If
‘ 2. 塗りつぶし(Fill)のカラー監査
If s.Fill.Type = cdrUniformFill Then
If IsViolationColor(s.Fill.UniformColor) Then
‘ 是正措置:ブランド指定カラー(例:コーポレートブルー)に強制置換
s.Fill.UniformColor.CopyAssign GetApprovedColor()
‘ 視覚的に目立たせるためのハイライト(赤枠に変更するなど)を指定する場合:
‘ s.Outline.SetProperties 10, , CreateRGBColor(255, 0, 0)
count = count + 1
End If
End If
‘ 3. テキストフレームのフォント監査
If s.Type = cdrTextShape Then
If s.Text.Story.Length > 0 Then
Dim fontName As String
fontName = s.Text.Story.Font
If IsForbiddenFont(fontName) Then
‘ 是正措置:安全な標準フォント(例:BIZ UDPGothic)へ強制置換
s.Text.Story.Font = “BIZ UDPGothic”
count = count + 1
End If
End If
End If
Next s
ScanAndFixShapes = count
End Function
‘ ——————————————————————————
‘ カラー判定ロジック(許容範囲外のRGB/CMYKを検知)
‘ ——————————————————————————
Private Function IsViolationColor(ByVal col As Color) As Boolean
‘ 例として、「真っ白(RGB 255,255,255)」や「完全な黒」以外で
‘ ブランド指定のCMYKプロファイルから外れているものを違反とみなす簡易ロジック
‘ 実務では厳密なLab色差(ΔE)計算などをここに組み込む
If col.Type = cdrColorCMYK Then
‘ 例:シアンが特定の数値以外の場合を違反とする等の判定
‘ ここでは簡易的に「近似していない色」をすべて検知するモック
If Abs(col.CMYK.Cyan – BRAND_PRIMARY_CMYK_C) > 20 Then
IsViolationColor = True
Exit Function
End If
Else
‘ RGBカラーが混入している場合は即座に違反と判定(印刷物の場合)
IsViolationColor = True
Exit Function
End If
IsViolationColor = False
End Function
‘ ——————————————————————————
‘ 承認済みブランドカラーの返却
‘ ——————————————————————————
Private Function GetApprovedColor() As Color
Dim c As Color
Set c = CreateCMYKColor(BRAND_PRIMARY_CMYK_C, BRAND_PRIMARY_CMYK_M, BRAND_PRIMARY_CMYK_Y, BRAND_PRIMARY_CMYK_K)
Set GetApprovedColor = c
End Function
‘ ——————————————————————————
‘ 禁止フォント判定
‘ ——————————————————————————
Private Function IsForbiddenFont(ByVal fName As String) As Boolean
If InStr(1, fName, FORBIDDEN_FONT_1, vbTextCompare) > 0 Or _
InStr(1, fName, FORBIDDEN_FONT_2, vbTextCompare) > 0 Then
IsForbiddenFont = True
Else
IsForbiddenFont = False
End If
End Function
—
3. チーフアーキテクトが教える、実務投入時の「鉄則」
上記のコードをそのまま社内サーバーに配備し、全デザイナーに実行させるにあたって、プロフェッショナルとしていくつかの警告と追加実装のヒントを伝えておく。
画面描画の凍結(`Optimization = True`)は絶対の義務
CorelDRAW VBAにおいて、マクロ実行中に画面描画が有効なままだと、シェイプのプロパティを1つ書き換えるたびにUIが再描画され、処理速度が数百倍に低下する。さらに最悪の場合、メモリリークや描画スレッドの競合によるクラッシュを引き起こす。
今回提供したコードの通り、処理の冒頭で `Optimization = True` と `EventsEnabled = False` をかけ、必ず `On Error GoTo` のクリーンアップブロックで元に戻す このイディオムは、CorelDRAW開発における「息をするように守るべき戒律」である。
「警告(Audit)」と「自動修正(Correction)」のモード分け
今回のコードは検出と同時に強制置換(Fix)を行っているが、ブランドの厳格度によっては「勝手にデータを書き換えられると困る(レイアウトが崩れる可能性がある)」というデザイナーからの反発が予想される。
その場合は、フラグ変数(例: `Const AUTO_CORRECT As Boolean = False`)を設け、`False` のときは置換を行わずに、該当オブジェクトの周囲に「赤色の監査用ワイヤーフレーム(Border)」を自動付与してレイヤーに集約する「ハイライトモード」に切り替えられる設計に拡張すると、現場の受容性が飛躍的に高まる。
データベースやクラウド連携への拡張
企業のブランドガイドラインは生き物だ。今年はOKだったカラーが、来年はNGになるかもしれない。
このVBAの背後にJSONファイル(または社内Web API)を置くことで、CorelDRAW起動時に最新のカラーパレット定義をHTTP経由で取得し、上記の `BRAND_PRIMARY_CMYK_C` などの定数を動的に書き換えるアーキテクチャに進化させれば、全社共通の「完全統制型ブランドガバナンス・エコシステム」が完成する。
—
終わりに:ツールを作る者が、ルールを作る
デザインの現場において、クリエイティビティとコンプライアンスはしばしば衝突する。しかし、エンジニアリングの力をもってすれば、その衝突を「手作業の無駄なチェック」から「瞬時の自動最適化」へと昇華させることができる。
仕様書を読み込み、オブジェクトのライフサイクルを慈しみ、例外を完全にコントロールする者だけが、真に現場で信頼されるツールを組み上げることができる。さあ、このコードをあなたの環境にデプロイし、社内のブランドクオリティを次の次元へと引き上げたまえ。
