【入門編】【実務効率化】特定キーワードを含むレイヤー以外の全レイヤーを一括非表示にしてデザインの比較検証をしやすくするマクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは! CorelDRAW VBAの世界へようこそ。
日々、複雑なレイヤーが何層にも重なったデザインデータと格闘していませんか?

「特定のキーワードが入ったレイヤーだけを残して、他のレイヤーは一発で非表示にしたい……。でも、何十もあるレイヤーを一つずつ目視でカギ(非表示アイコン)をクリックしていくなんて、手が何本あっても足りない!」

そんな実務の現場で感じる絶望的なストレスを、たった数行のコードで解決してしまう魔法のようなマクロをご紹介します。ここをクリアすれば、あなたのCorelDRAW VBAのスキルは「初心者」の域を脱し、確実に「実務効率化のエンジニア」への階段を登ることになりますよ。

それでは、一緒に本質を学んでいきましょう!

—

なぜ「マクロの記録」では限界なのか?

CorelDRAWには便利な「マクロの記録」機能がありますが、レイヤーの表示・非表示の切り替えを記録すると、以下のようなコードが出力されます。

‘ マクロの記録が吐き出す冗長なコード例
ActivePage.Layers.Item(“レイヤー 1”).Visible = False
ActivePage.Layers.Item(“レイヤー 2”).Visible = False
ActivePage.Layers.Item(“レイヤー 3”).Visible = False

これでは、「次にドキュメントを開いたとき、レイヤー名や数が変わっていたら全く機能しない」という致命的な欠点があります。
プロの自動化エンジニアが書くコードは、データの構造(オブジェクトの数や名前)がどう変わろうとも、動的に判断して処理を実行する「柔軟性」を持たせます。

—

現場で即戦力となる!特定キーワード抽出&一括制御マクロ

それでは、今回のテーマである「指定キーワードを含むレイヤー以外をすべて非表示にする」完全版コードを公開します。
CorelDRAWのVBAエディタ(Alt + F11)を開き、標準モジュールに貼り付けて実行してみてください。

Sub FocusLayersByKeyword()
‘ — 宣言セクション —
Dim srLayer As Layer
Dim targetKeyword As String
Dim affectedCount As Long

‘ 1. ユーザーに検索キーワードを入力させる(例:「Mockup」「Draft」など)
targetKeyword = InputBox(“表示したいレイヤー名に含まれるキーワードを入力してください:”, “レイヤー一括絞り込み”, “Mockup”)

‘ キャンセルされた場合は処理を中断
If targetKeyword = “” Then Exit Sub

‘ 2. パフォーマンス最適化:画面描画をロックして爆速化
ActiveDocument.Optimization = True
ActiveDocument.UndoBegin “レイヤー表示の絞り込み”

affectedCount = 0

‘ 3. アクティブページの全レイヤーをループ処理(これがCorelDRAW VBAの真髄)
For Each srLayer In ActivePage.Layers

‘ ガイド線レイヤーやマスターレイヤーなどの特殊レイヤーでエラーが出るのを防ぐ保護処理
If Not srLayer.IsMaster Then

‘ レイヤー名にキーワードが含まれているか判定 (InStr関数を使用)
If InStr(1, srLayer.Name, targetKeyword, vbTextCompare) > 0 Then
‘ キーワードが含まれる場合は「表示」にする
srLayer.Visible = True
Else
‘ 含まれない場合は「非表示」にする
srLayer.Visible = False
affectedCount = affectedCount + 1
End If

End If
Next srLayer

‘ 4. 最適化の解除とアンドゥ情報のファイナライズ
ActiveDocument.UndoEnd
ActiveDocument.Optimization = False
ActiveWindow.Refresh

‘ 完了メッセージ
MsgBox “処理が完了しました!” & vbCrLf & _
“キーワード: [” & targetKeyword & “]” & vbCrLf & _
“非表示にしたレイヤー数: ” & affectedCount & ” 個”, vbInformation, “一括制御完了”
End Sub

—

コードの注目ポイント:プロが仕込む3つの知見

ただ動くだけのコードと、プロが書く堅牢なコードの決定的な違いを解説します。ここを理解すれば、他の自動化に応用が利くようになりますよ。

1. `For Each` によるコレクション走査

CorelDRAWのページ内にある全レイヤー (`ActivePage.Layers`) を、上から順に漏れなく拾い上げる鉄板の書き方です。「レイヤーが何個あろうとも自動で最後まで走査する」ため、データの増減にびくともしない強靭な構造になります。

2. `InStr` 関数によるあいまい検索

完全一致(`= “Mockup”`)ではなく、`InStr`(イン・ストリング)関数を使うことで、「レイヤー名の一部にキーワードが含まれていればOK」という柔軟な判定を実現しています。
`vbTextCompare` を指定しているため、大文字・小文字(`mockup` と `Mockup`)を区別せずにヒットさせることができます。実務ではこの「ちょっとした気遣い」がエラーを防ぐ鍵になります。

3. `ActiveDocument.Optimization = True`(爆速化の呪文)

CorelDRAW VBAで最も重要なのがこれです。
レイヤーの表示・非表示を切り替えるたびに画面を再描画(リフレッシュ)させていると、レイヤー数が多いデータではフリーズしたかのように処理が重くなります。
処理の直前で画面描画をロック(`Optimization = True`)し、処理が終わったら一気に解放(`Optimization = False`)することで、体感スピードが何倍にも跳ね上がります。 このテクニックを使っているだけで、周囲から「おっ、分かっているな」と一目置かれるはずです。

—

陥りやすいエラーと対処法

Q. 「マスターレイヤー」や「ガイド線」のあたりでエラーになります

A. コード内でも対策していますが、CorelDRAWには通常のデザインレイヤー以外に、全ページ共通の「マスターレイヤー」や、特殊な「ガイド線レイヤー」が存在します。これらは名前の構造や仕様が特殊なため、今回のループで触るとエラーを起こすことがあります。
そのため、`If Not srLayer.IsMaster Then` というガード節(除外フィルター)を必ず挟むのが、安全なコードを書く鉄則です。

—

おわりに

お疲れ様でした! 今回作成したマクロをカスタムボタンやショートカットに割り当てておけば、複雑なレイヤー構造のデザイン比較検証が一瞬で終わるようになります。

CorelDRAW VBAは、オブジェクトのライフサイクルとCorel特有の仕様(Optimizationやマスターページの概念など)さえ掴んでしまえば、あなたの右腕となってデザイン作業の生産性を限界突破させてくれる最強の相棒です。

「ここをもっとこうしたい」「こんな自動化もできる?」といった疑問があれば、いつでも先輩エンジニアに聞いてくださいね。それでは、快適なCorelDRAWライフを!

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