【入門編】【コンフィギュレーション名の正規表現マッチング】VBScript.RegExpを組み合わせたマルチ構成部品の柔軟なフィルタリング – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの真髄:正規表現で「特定のコンフィギュレーション」を自由自在に操る

こんにちは。自動化の深淵へようこそ。
「マクロの記録」ボタンを押して生成される、冗長で修正困難なコードに疲弊していませんか?

SolidWorks APIを使いこなすということは、単にメソッドを呼び出すことではありません。「SolidWorksという巨大なメモリ空間上のオブジェクトを、いかにエレガントに、かつ高速に操作するか」という設計思想そのものです。

今回は、現場で最も需要が高いのに、意外と情報が散らばっている「コンフィギュレーションの正規表現フィルタリング」を解説します。これを習得すれば、数千ものバリエーションを持つアセンブリから、特定の設計ルールに従った構成だけを瞬時に抽出できるようになります。

1. なぜ「正規表現(RegExp)」が必要なのか?

SolidWorksの `GetConfigurationNames` メソッドで取得できるのは、ただの文字列配列です。
もしあなたが、「P-」で始まり、数値が3桁あり、末尾にリビジョン情報があるような構成だけを処理したい場合、`If` 文を何重にも重ねる地獄のようなコードを書くことになります。

そこで登場するのが VBScript.RegExp オブジェクト です。これを使うことで、複雑な命名規則を「パターン」として記述し、スマートに抽出できるようになります。

2. 実践:正規表現を用いた構成部品フィルタリング

まずは、最も洗練されたコードを提示しましょう。これをモジュールにコピーして、その凄みを体感してください。

Option Explicit

‘ 参照設定不要でRegExpを扱うための準備
Sub FilterConfigurationsByRegex()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim configNames As Variant
Dim i As Long
Dim regEx As Object

‘ 1. オブジェクトのセットアップ
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then Exit Sub

‘ 2. RegExpオブジェクトの生成(Late Binding)
Set regEx = CreateObject(“VBScript.RegExp”)

‘ 3. 正規表現パターンの定義
‘ 例: “P-” で始まり、3桁の数字、その後に “-” が続き、何か文字が続くもの
regEx.Pattern = “^P-\d{3}-.”
regEx.IgnoreCase = True ‘ 大文字小文字を区別しない

‘ 4. 全コンフィギュレーション名の取得
configNames = swModel.GetConfigurationNames

‘ 5. ループ処理とマッチング
Debug.Print “— 抽出されたコンフィギュレーション —”
For i = LBound(configNames) To UBound(configNames)
If regEx.Test(configNames(i)) Then
‘ ここにやりたい処理を記述(例:PDF出力、プロパティ更新など)
Debug.Print “マッチ成功: ” & configNames(i)

‘ 例:構成を切り替えて処理する場合
‘ swModel.ShowConfiguration2 configNames(i)
End If
Next i

Set regEx = Nothing
End Sub

3. コードの読み解き:ここがエンジニアの分かれ道

このコードで重要なポイントは3つです。

① Late Binding(遅延バインディング)の利点

`CreateObject(“VBScript.RegExp”)` を使用しています。これにより、ツールメニューから「参照設定」を行う手間が省けます。配布先のPCで「参照が見つからない!」というエラーを回避できる、実務上の必須テクニックです。

② `regEx.Pattern` の力

今回のパターン `^P-\d{3}-.` は以下を意味します。

  • `^` : 行の先頭
  • `P-` : 文字列「P-」
  • `\d{3}` : 数字がちょうど3回繰り返される
  • `-` : ハイフン
  • `.` : その後に続く任意の文字列すべて

このパターンを書き換えるだけで、命名規則が変わってもコードを一行も修正せずに対応できます。これがハードコーディング(`If Name = “P-001” Or Name = “P-002″…`)との決定的な差です。

③ SolidWorks APIのメモリ管理

`swModel.GetConfigurationNames` は配列を返します。この配列をループする際、`LBound` と `UBound` を使うのはVBAの鉄則です。配列の要素数を意識しないコードは、予期せぬバグの温床になります。

4. 陥りやすい罠と解決策

初学者がよくやるミスは、「ループの中で構成を切り替えすぎて動作が重くなる」ことと、「非表示の構成まで処理してエラーになる」ことです。

  • アドバイス: コンフィギュレーションの切り替え(`ShowConfiguration2`)は非常にコストの高い(遅い)処理です。可能であれば、モデルの状態を切り替えずに「カスタムプロパティの取得」だけで完結させられないか検討してください。`swModel.GetConfigurationByName(configName)` を使用すれば、表示を切り替えずに内部的なプロパティ情報へアクセス可能です。

最後に:自動化の先へ

今回紹介した「正規表現によるフィルタリング」は、SolidWorks自動化の入り口に過ぎません。

この手法をマスターすれば、あとは「PDFを書き出す」「部品表(BOM)をExcelへエクスポートする」「質量を取得して集計する」といった処理を組み合わせるだけで、数時間かかるルーチンワークを数分で終わらせるツールが構築できます。

ここをクリアしたあなたは、もう「マクロの記録」に頼る初心者ではありません。「SolidWorksのデータ構造を定義通りに制御するエンジニア」の入り口に立っています。

次は、どの部分を自動化しますか?あなたの設計業務が、より創造的な作業で満たされることを心から応援しています。

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