【実務・中級編】【初心者向け】アセンブリ内の特定コンポーネントを名前の部分一致でワイルドカード検索して一括選択するVBAマクロ – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA】地獄のコンポーネント選択を自動化せよ:ワイルドカード検索でアセンブリを掌握する極意

SolidWorksのアセンブリ構成が数百、数千の部品に膨れ上がったとき、手作業で特定のコンポーネントを探し出し、選択して合致を組む……そんな「修行」に時間を奪われていないか?

もし君が、アセンブリ内の部品一つひとつをクリックして回っているなら、それはエンジニアの仕事ではない。ただの作業だ。今日は、「名前の部分一致」でコンポーネントを瞬時に捕捉し、自動選択させるアーキテクチャを授ける。

これは単なるコードの提供ではない。大規模アセンブリを扱うための「設計思想」の話だ。

—

1. なぜ「手作業」が設計の癌(がん)なのか

アセンブリをいじる際、手作業によるミスは必ず起きる。

  • 選択漏れ: 見えない場所にある部品を拾い忘れる。
  • ヒューマンエラー: 似た名前の別部品を選択し、誤った合致を生成する。

VBAで自動化する最大のメリットは、「計算機による厳密なフィルタリング」だ。コードを書くことで、人間が入り込む余地のない「再現性」をアセンブリに持ち込むことができる。

—

2. 堅牢なコードの要諦:再帰とオブジェクト管理

コンポーネントを検索する際、多くの初心者は「トップレベルのアセンブリしか見ない」という致命的なミスを犯す。実務のアセンブリは必ず「サブアセンブリ」で階層化されている。

この階層構造を突破するには、再帰処理(Recursive)が必須だ。

【プロダクションコード】部品名によるワイルドカード選択

以下のコードは、指定した文字列を含むコンポーネントを、全階層から洗い出して選択状態にするものだ。

Option Explicit

‘ 伝説的なエンジニアの設計:エラーハンドリングと再帰構造
Public Sub SelectComponentsByWildcard()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ アセンブリ以外では実行させない(ガード節)
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いて実行してください。”
Exit Sub
End If

Set swAssy = swModel

‘ 検索したい文字列(例:”_FIX” で終わる部品など)
Dim searchStr As String
searchStr = InputBox(“検索する名前の一部を入力してください:”, “コンポーネント検索”)

If searchStr = “” Then Exit Sub

‘ 選択状態をクリアしてから開始
swModel.ClearSelection2 True

‘ 再帰検索の開始
ProcessComponents swAssy.GetComponents(False), searchStr, swModel
End Sub

Private Sub ProcessComponents(comps As Variant, target As String, model As ModelDoc2)
Dim i As Long
Dim swComp As SldWorks.Component2

If IsEmpty(comps) Then Exit Sub

For i = 0 To UBound(comps)
Set swComp = comps(i)

‘ コンポーネント名(ファイル名)が検索文字を含んでいるか判定
‘ LCaseを使用し、大文字小文字を無視する堅牢な比較
If InStr(1, LCase(swComp.Name2), LCase(target)) > 0 Then
swComp.Select4 True, Nothing, False
End If

‘ サブアセンブリがある場合は再帰的に掘り下げる
If swComp.GetChildrenCount > 0 Then
ProcessComponents swComp.GetChildren, target, model
End If
Next i
End Sub

—

3. 実務で勝つための「プロの知見」

① `Select4` メソッドの「True」を理解せよ

コード中の `swComp.Select4 True, Nothing, False`。ここでの第一引数 `True` は、「既存の選択に追加する」という意味だ。これを `False` にすると、一つ選ぶたびに前が消える。大量選択を行う際は、必ず `True` を指定すること。

② パフォーマンスの重みを知る

数千部品ある場合、`swComp.Select4` をループ内で回すと、画面描画のオーバーヘッドで非常に重くなる。もし速度が問題になる場合は、`swModel.SelectMethod = swSelectMethod_Default` 等の最適化を検討するが、まずはこのコードで「正確に選ぶ」ことの重要性を学んでほしい。

③ 名前空間とファイル名の罠

ファイル名とコンポーネント名は、SolidWorks上では別物になりうる(名前変更時など)。より高度な制御が必要な場合は `swComp.GetPathName` でファイルパスを特定し、そこから `Scripting.FileSystemObject` を使ってファイル名を取得する方が、より堅牢なデータベース連携が可能になる。

—

最後に:自動化は「設計」だ

今回紹介したコードは、あくまで「道具」に過ぎない。
君たちが本当にやるべきは、このコードをベースに、「合致作成の自動化(MateEntity)」や「特定部品の入れ替え」へとステップアップすることだ。

自動化エンジニアの価値は、コードの行数ではなく、「どれだけ人為的ミスを排除し、設計時間をクリエイティブな思考のために捻出したか」で決まる。

さあ、このコードを自分のプロジェクトに組み込み、手作業の地獄から脱却せよ。君が設計に集中できる時間を、このツールが創り出すはずだ。

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