【入門編】【初心者向け】アクティブページ内にあるすべてのパスの総ノード数を算出し、デザインの複雑さを簡易評価するスクリプト – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは。CorelDRAWの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの日常から一歩踏み出し、自分の手でCorelDRAWを操る楽しさを知ろうとしているあなたを、私は心から歓迎します。

今日は、「デザインの複雑さ」を数値化するという、一見地味ですが、プロの現場では「重いデータ」を事前に弾くための非常に重要な監査ツールを作ってみましょう。

—

なぜ「ノード数」を数えるのか?

デザイン制作において、ノード数が膨大なデータは、保存やPDF変換の際にトラブルを招きます。また、単純に動作が重くなる原因でもあります。

今回作成するスクリプトは、アクティブページ内のすべてのシェイプを巡回し、その中から「曲線(Curve)」オブジェクトを抽出し、ノードの合計を叩き出すものです。これを知るだけで、あなたの設計するデータの「健康状態」が一目で分かるようになります。

—

現場で使える「ノード数算出」スクリプト

以下のコードを、CorelDRAWのVBAエディタ(`Alt + F11`)を開き、標準モジュールに貼り付けてみてください。

Sub AuditDesignComplexity()
Dim s As Shape
Dim totalNodes As Long
Dim curveCount As Long

‘ ノード数の集計用変数を初期化
totalNodes = 0
curveCount = 0

‘ アクティブページ内の全シェイプをループ処理
‘ ActivePage.Shapes は、ページ内のすべてのオブジェクトを網羅します
For Each s In ActivePage.Shapes
‘ シェイプが曲線(Curve)かどうかを判定
‘ 矩形や楕円もCurveに変換すればノードを持てますが、今回は純粋な曲線に絞ります
If s.Type = cdrCurveShape Then
‘ ノード数を加算
totalNodes = totalNodes + s.Curve.Nodes.Count
curveCount = curveCount + 1
End If
Next s

‘ イミディエイトウィンドウに出力 (Ctrl+G で表示)
Debug.Print “—————————-”
Debug.Print “監査完了: ” & Now
Debug.Print “対象オブジェクト数: ” & curveCount
Debug.Print “総ノード数: ” & totalNodes
Debug.Print “平均ノード数: ” & IIf(curveCount > 0, totalNodes / curveCount, 0)
Debug.Print “—————————-”

MsgBox “監査終了しました。” & vbCrLf & _
“総ノード数: ” & totalNodes, vbInformation, “解析レポート”
End Sub

—

このコードの「本質」を解説します

初心者の方がつまづきやすいポイントを、エンジニアの視点で解説します。

1. `For Each` 文の威力

VBAで最も美しく、かつ効率的な書き方がこれです。「ページ内のすべてのシェイプに対し、一つずつ処理を実行する」という命令です。`For i = 1 To 10` のように数字で数えるよりも、オブジェクトそのものを直接扱う `For Each` のほうが、コードが読みやすく、バグも減ります。

2. `s.Type` によるフィルタリング

CorelDRAWには、テキスト、ビットマップ、グループなど様々なオブジェクトが存在します。`s.Type = cdrCurveShape` と指定することで、「曲線以外は無視する」という選別を行っています。「何でもかんでも処理しない」ことこそ、自動化の第一歩です。

3. `Debug.Print` とイミディエイトウィンドウ

画面上にいちいちメッセージボックスを出すのは、デバッグ時には邪魔になります。`Debug.Print` を使うと、VBAエディタの下部にある「イミディエイトウィンドウ」に結果が表示されます。ここを使いこなせるようになると、一人前の開発者の仲間入りです。

—

初心者が陥りやすいエラーと回避策

  • 「オブジェクトがありません」エラー:

`ActivePage` を使う場合、ドキュメントが開かれていないとエラーになります。必ずコードの先頭に `If ActiveDocument Is Nothing Then Exit Sub` のような「安全装置」を入れる癖をつけましょう。

  • グループ化されたシェイプ:

上記のコードは「ページ直下のシェイプ」しか見ていません。グループの中にあるシェイプも数えたい場合は、再帰的な処理(自分自身を呼び出す関数)が必要になります。まずはこのコードで「直下のノード」を数える感覚を養ってください。

—

次のステップへ

ノード数を数えることができたら、次は「ノード数が多すぎるシェイプを自動的に赤枠で囲む」といったアクションに繋げてみてください。

CorelDRAWのAPIは非常に強力です。一度この世界に足を踏み入れれば、これまで何時間もかけていた修正作業が、わずか数秒のクリックで終わるようになります。

分からないことがあれば、いつでも聞いてください。あなたの自動化の旅を、私はこれからも全力でサポートします。さあ、次はどんなツールを作ってみたいですか?

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