CorelDRAW VBAの「闇」を断つ:巨大画像によるファイル肥大化をVBAで秒殺する
こんにちは。CorelDRAWの自動化の世界へようこそ。
日々、重すぎて開くたびにコーヒーを淹れる時間ができてしまうような「巨大CDRファイル」に頭を抱えていませんか?
グラフィックデザインの現場では、高解像度の写真をそのまま配置し、結果として数GBのファイルが爆誕するのは「あるある」です。しかし、これを手動で再サンプリングするのは時間の無駄。今日は、「VBAを使って、埋め込まれたビットマップを自動的に適切な解像度へ調整し、劇的に軽量化する」という、実務直結のアーキテクチャを伝授します。
—
なぜ、CDRファイルは肥大化するのか?
CorelDRAWのファイルサイズが肥大化する最大の要因は、「必要以上の解像度を持つビットマップ」です。
例えば、WEB用や小さなチラシに使うロゴなのに、一眼レフで撮影した4000px超えの画像をそのまま配置していませんか?CorelDRAWは優秀ですが、無駄なデータまで律儀に抱え込んでしまいます。
これを「再サンプリング(Resample)」という手法で、表示サイズに見合った解像度(300dpiなど)に変換してやれば、ファイルサイズは数十分の1になることも珍しくありません。
—
現場でそのまま使える「画像一括最適化」スクリプト
このコードは、アクティブなドキュメント内にあるすべてのビットマップを走査し、300dpiを超えているものを強制的に再サンプリングするものです。
Sub OptimizeBitmaps()
Dim s As Shape
Dim sr As ShapeRange
Dim bMap As Bitmap
‘ エラー回避:選択範囲に関わらずページ内の全ビットマップを対象にする準備
Set sr = ActivePage.FindShapes(Type:=cdrBitmapShape)
If sr.Count = 0 Then
MsgBox “最適化対象のビットマップが見つかりませんでした。”
Exit Sub
End If
‘ 進行状況を可視化するための最適化
Optimization = True
For Each s In sr
Set bMap = s.Bitmap
‘ 解像度が300dpiを超えている場合のみ処理(無駄な再計算を防ぐ)
If bMap.ResolutionX > 300 Or bMap.ResolutionY > 300 Then
‘ Resample メソッド: 新しい幅(px), 新しい高さ(px), 新しい解像度(dpi), アンチエイリアス
‘ ここでは解像度を300dpiに固定する設計
bMap.Resample 0, 0, 300, True
End If
Next s
Optimization = False
ActiveWindow.Refresh
MsgBox “軽量化処理が完了しました!ファイルサイズを確認してください。”
End Sub
—
コードを読み解く:エンジニアの「視点」
初心者の方がマクロの記録から一歩先へ進むために、特に重要なポイントを解説します。
1. `Optimization = True` の魔法
CorelDRAW VBAにおいて、画面の描画更新は非常に重い処理です。これを `True` にすると、処理中の画面描画を停止し、実行速度が劇的に向上します。大規模なファイルほど、この一行の有無で数分の差が出ます。
2. `FindShapes` メソッドの強力さ
全オブジェクトをループで回して `If s.Type = cdrBitmapShape Then…` と判定するやり方は、実は非効率です。`ActivePage.FindShapes` を使うことで、最初からビットマップだけを抽出したリストを作ることができます。これが「無駄のない設計」の第一歩です。
3. `Resample` の引数 `0, 0` の意味
`Resample(Width, Height, Resolution, Antialias)` の引数で、幅と高さを `0` にすると、「現在の物理サイズを維持したまま、解像度だけを変換する」という指示になります。これが今回の肝です。
—
陥りやすいエラーと対策
- 「ビットマップがリンクされている場合」:
このコードは「埋め込み画像」を対象としています。リンク画像の場合は `bMap.Linked` プロパティをチェックして処理を分ける必要があります。
- 「非破壊編集ではない点」:
VBAの再サンプリングは破壊的な処理です。必ず作業前にファイルのバックアップを取る習慣をつけてください。自動化ツールを使う時こそ、安全装置(保険)を忘れてはいけません。
—
次のステップ:さらなる効率化へ
ここをクリアしたあなたは、もう「マクロ記録」に頼るだけの初心者ではありません。
次は、「特定のフォルダ内の全CDRファイルを一括で開いて、このスクリプトを走らせて上書き保存する」というバッチ処理に挑戦してみてください。
CorelDRAW VBAは、単なる事務作業の自動化ツールではなく、あなたのクリエイティブを支える強力なエンジンです。わからないことがあれば、またいつでも聞いてください。焦らず、一歩ずつ、理想の自動化環境を構築していきましょう。
応援しています!
