【初心者向け】選択した複数のベクターシェイプの不透明度(透明度)を一括変更し、グラフィック全体に統一感を出すマクロ
こんにちは!日々のデザイン業務やデータ作成、お疲れ様です。
CorelDRAWでの繰り返し作業に「もっと一瞬で終わればいいのに…」と感じたことはありませんか?
「マクロの自動記録は使ってみたけれど、コードの中身はチンプンカンプン…」
「そろそろ自分でコードを書いて、一歩進んだ自動化に挑戦したい!」
そんなあなたに寄り添うために、今回は「選択した複数のオブジェクトの透明度を一瞬で均一にするマクロ」を題材に、CorelDRAW VBAの基本と、プロの現場でも通用する「美しく、壊れにくいコードの書き方」を優しく丁寧に解説します。
ここをクリアすれば、CorelDRAW VBAの基礎はバッチリ掴めますよ。一緒に一歩を踏み出してみましょう!
—
1. なぜ「透明度の一括変更」が最初のステップに最適なのか?
CorelDRAWでグラフィックを作る際、重なり合う図形に半透明の効果(透かし)を入れて、デザインに奥行きや統一感を出す演出はよく使われますよね。
しかし、標準機能でこれをやろうとすると、オブジェクトを1つずつ選んで「透明度ツール」を起動し、スライダーを調整して……という、非常にクリック数の多い作業になってしまいます。
これをVBAで自動化するとき、実はCorelDRAWならではの「超重要な基本」がぎゅっと凝縮されています。
1. 「選択されたものだけ」を狙い撃ちして処理する(選択範囲の取得)
2. 複数の図形を1つずつ順番に処理する(ループ処理)
3. CorelDRAW特有の「透明度」の数値のルールを理解する
この3つの基本をマスターすれば、透明度だけでなく「色の一括変更」や「サイズの一括調整」など、あらゆる応用マクロが自力で書けるようになります!
—
2. CorelDRAW VBAにおける「透明度」のちょっと意外なルール
コードを書く前に、1つだけ頭に入れておきたい「CorelDRAWのルール」があります。
多くのデザインソフト(Illustratorなど)では、目に見える度合いを「不透明度(Opacity)」という言葉で表し、100%がクッキリ、0%が見えない状態になりますよね。
しかし、CorelDRAW VBAの世界では「透明度(Transparency)」という言葉を使います。
つまり、数値の意味が逆になります。
- `0` = まったく透明ではない(クッキリ見える)
- `100` = 完全に透明(見えない)
「50%の透かしを入れたい」という場合は、中間の `50` を指定すればOKですが、「30%だけ薄くしたい(=70%の不透明度)」という場合は、VBA側では `30` を指定することになります。この直感と逆になる仕様は、初心者が一番迷いやすいポイントです。まずはここを押さえておきましょう!
—
3. そのままコピペで動く!一括透明度変更マクロ
では、実際に動くコードを見てみましょう。
CorelDRAWのメニューから [ツール] > [スクリプト] > [スクリプトエディタ](または `Alt + F11`)を開き、標準モジュールに以下のコードを貼り付けてみてください。
Sub ApplyUniformTransparencyToSelection()
‘ ————————————————————————-
‘ 目的: 選択しているすべてのオブジェクトに対して、均一な透明度(50%)を一括適用します。
‘ ————————————————————————-
Dim sh As Shape
Dim sel As ShapeRange
Dim targetTransparency As Integer
‘ — 【設定値】ここで透明度を指定します(0 = 不透明, 100 = 完全透明) —
targetTransparency = 50
‘ ————————————————————————-
‘ 1. 現在選択されているオブジェクトがあるか確認します
Set sel = ActiveSelectionRange
If sel.Count = 0 Then
MsgBox “オブジェクトが何も選択されていません。” & vbCrLf & _
“透明度を変更したい図形を選択してから実行してください。”, vbExclamation, “お知らせ”
Exit Sub
End If
‘ 2. 万が一の操作ミスに備え、Ctrl+Z(元に戻す)を「1回」で済むようにグループ化します
ActiveDocument.BeginCommandGroup “透明度の一括変更”
On Error GoTo ErrorHandler ‘ 予期せぬエラーが発生した場合の保険をかけます
‘ 3. 選択されたオブジェクトを1つずつループ処理します
For Each sh In sel
‘ グループ化されているオブジェクトそのものはスキップし、個別の図形に適用します
If sh.Type <> cdrGroupShape Then
‘ オブジェクトの透明度タイプを「一様(均一な透明度)」に設定
sh.Transparency.Type = cdrUniformTransparency
‘ 透明度の値を適用(0〜100)
sh.Transparency.Value = targetTransparency
End If
Next sh
‘ 4. 処理が正常に終わったら、コマンドグループを閉じます
ActiveDocument.EndCommandGroup
‘ 画面を最新の状態に更新します
ActiveWindow.Refresh
Exit Sub
ErrorHandler:
‘ エラーが起きた場合は、強制的にコマンドグループを閉じて安全を確保します
ActiveDocument.EndCommandGroup
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
—
4. 先輩が教える!コードの重要ポイント徹底解説
このコードには、ただ動くだけでなく、「実際のデザイン現場でトラブルを起こさないための工夫」が散りばめられています。一緒に紐解いていきましょう。
① `ActiveSelectionRange` を使う理由
初心者のうちは `ActiveSelection` という記述をよく見かけますが、プロのコードでは `ActiveSelectionRange`(ShapeRangeオブジェクト)を好んで使います。
これは、選択された複数の図形を「1つのリスト(配列のようなもの)」として安全に保持してくれるため、ループ処理(`For Each`)との相性が抜群だからです。
② `BeginCommandGroup` という「優しさの魔法」
CorelDRAWでマクロを実行したとき、もし100個の図形を処理したら、Ctrl + Z(元に戻す)を100回押さなければ元に戻せなくなってしまいます。これではデザイナーのストレスは最高潮に達してしまいますよね。
そこで、処理の前に `ActiveDocument.BeginCommandGroup` を宣言し、最後に `EndCommandGroup` で閉じます。こうすることで、「マクロの処理全体を1回のアンドゥ(元に戻す)にまとめる」ことができます。これは実務用マクロには必須のテクニックです。
③ `sh.Type cdrGroupShape` によるエラー回避
選択範囲の中に「グループ化されたオブジェクト」が含まれている場合、グループ全体に直接透明度を設定しようとすると、CorelDRAWが混乱して意図しない表示崩れを起こすことがあります。
そのため、`If sh.Type <> cdrGroupShape Then` という条件を挟み、「グループそのものには処理をせず、単体の図形だけに処理を行う」という安全弁を設けています。
—
5. さらに便利に!応用へのステップアップ
基本のコードが動いたら、少しだけ欲張って改造してみましょう!
毎回コードを開いて `targetTransparency = 50` を書き換えるのは面倒ですよね。実行したときに「何パーセントにしますか?」と聞いてくれるように改造してみましょう。
設定値の部分を、以下のように `InputBox` を使う形に書き換えてみます。
‘ — 【設定値】ユーザーに入力を求めます —
Dim userInput As String
userInput = InputBox(“透明度を入力してください(0〜100)” & vbCrLf & _
“0: 不透明 / 50: 半透明 / 100: 完全透明”, “透明度の一括設定”, “50”)
‘ キャンセルされた場合は処理を中止します
If userInput = “” Then Exit Sub
‘ 入力された文字を数値に変換します
targetTransparency = Val(userInput)
‘ 数値が正しい範囲(0〜100)に収まっているかチェックします
If targetTransparency < 0 Or targetTransparency > 100 Then
MsgBox “0から100の間の数値を入力してください。”, vbExclamation, “エラー”
Exit Sub
End If
‘ —————————————–
これだけで、実行するたびに自由な透明度を指定できる、極めて実用的なツールに進化します!
—
まとめ:ここをクリアすれば、CorelDRAW VBAの基本はバッチリ!
お疲れ様でした!
今回学んだステップを振り返ってみましょう。
1. 選択範囲(`ActiveSelectionRange`)を取得する
2. 安全対策(何も選択されていない場合の処理、`BeginCommandGroup`)を施す
3. ループ処理(`For Each`)で1つずつプロパティ(`Transparency`)を変更する
この流れは、CorelDRAWにおけるほぼすべてのオブジェクト操作マクロの「黄金パターン」です。この構造さえマスターしてしまえば、あとはプロパティを `Fill.UniformColor`(塗りつぶしの色)に変えたり、`Outline.Width`(輪郭の太さ)に変えたりするだけで、無限に応用ツールを作ることができます。
マクロの自動記録から一歩踏み出し、自分の手でコードを制御する楽しさを実感していただけたら嬉しいです。
もし途中でつまずいたり、分からないことがあればいつでも聞いてくださいね。あなたのVBA開発の旅を、いつでも応援しています!
