こんにちは。CorelDRAWの自動化の世界へようこそ。
現場で何百ものファイルを開き、修正を繰り返していると、必ずぶつかる壁があります。それが「レイヤーの断片化」です。プロジェクトが大きくなるほど、気づかないうちにレイヤーが細分化され、データ構造が複雑になり、動作が重くなる。これはCorelDRAWの「メモリ消費の罠」です。
今日は、そんな散らかったレイヤーを魔法のように一つに統合し、データを軽量化する「レイヤー統合(マージ)スクリプト」を伝授します。マクロの記録ボタンを押すだけの世界から、オブジェクトを自在に操るエンジニアの世界へ、一歩踏み出してみましょう。
—
なぜレイヤー統合が「データ軽量化」に繋がるのか?
CorelDRAWにおいて、各レイヤーは単なる表示単位ではありません。レイヤーごとに管理情報が保持されており、レイヤー数が数千に及ぶと、それだけでファイルサイズは肥大化し、再描画の負荷も跳ね上がります。
今回紹介するスクリプトは、「すべてのレイヤーのオブジェクトを、特定の『統合先レイヤー』へ一気に移動させ、空になった古いレイヤーを削除する」という、いわばデータの断捨離を行うものです。
—
実践:レイヤー統合の自動化コード
以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。
Sub MergeAllLayers()
Dim doc As Document
Dim targetLayer As Layer
Dim lyr As Layer
Dim shp As Shape
Set doc = ActiveDocument
‘ 1. 統合先のレイヤーを準備(もし存在しなければ作成)
Set targetLayer = doc.ActivePage.CreateLayer(“統合済みレイヤー”)
‘ 2. 全レイヤーをループしてオブジェクトを移動
‘ 注意:ActivePage.Layers は逆順で処理するのが安全です(削除時のインデックスズレを防ぐため)
Dim i As Long
For i = doc.ActivePage.Layers.Count To 1 Step -1
Set lyr = doc.ActivePage.Layers(i)
‘ 統合先レイヤー自身は除外する
If lyr.Name <> targetLayer.Name Then
‘ レイヤー内の全オブジェクトを移動
For Each shp In lyr.Shapes
shp.MoveToLayer targetLayer
Next shp
‘ オブジェクトが空になったレイヤーを削除
‘ ※「ガイドレイヤー」や「グリッド」は削除しないよう保護が必要です
If lyr.Shapes.Count = 0 And Not lyr.IsGuide Then
lyr.Delete
End If
End If
Next i
MsgBox “レイヤーの統合が完了しました。”, vbInformation
End Sub
—
コードのポイント解説:ここが「プロ」の流儀
このコードには、ただ動くだけではない、現場で生き残るための「哲学」が詰まっています。
1. `Step -1` の重要性
リストを上から順に処理しながら削除していくと、インデックス(番号)がズレてしまい、思わぬエラーが発生します。「コレクションを操作(削除・移動)する時は、後ろから処理せよ」。これは自動化エンジニアの鉄則です。
2. `MoveToLayer` メソッド
`Copy` して `Paste` するような素人臭い方法は使ってはいけません。`MoveToLayer` は、オブジェクトの参照を別のレイヤーコンテナに付け替えるだけの高速な処理です。クリップボードを経由しないため、パフォーマンスが段違いです。
3. ガイドラインの保護
`lyr.IsGuide` をチェックすることで、ガイド線専用レイヤーをうっかり削除する事故を防いでいます。ツールを作る際は「いかに便利にするか」よりも「いかに破壊を防ぐか」が重要です。
—
陥りやすいエラーと対策
- 「オブジェクトがロックされていて移動できない」エラー
- 対策: 移動の前に `If shp.Locked = True Then shp.Locked = False` を入れることで、強制的にロックを解除してから移動するように改良しましょう。
- 「隠しレイヤー(非表示レイヤー)」の扱い
- 対策: `lyr.Visible = True` にしてから処理を行う処理を追加すると、意図しないレイヤーが残るのを防げます。
—
次のステップへ
このスクリプトをベースに、例えば「ガイド線を特定のレイヤーに強制的に集める」機能や、「特定の名前を含むレイヤーだけ統合する」といったカスタマイズを加えてみてください。
CorelDRAW VBAの醍醐味は、「手作業で数時間かかる整理整頓を、一瞬で終わらせる」という支配感にあります。最初は難しく感じるかもしれませんが、オブジェクトの階層構造が見えるようになれば、あなたはもう初心者ではありません。
何か分からないことがあれば、いつでも聞いてください。あなたの自動化の旅を、全力でサポートします。
