【SolidWorks VBA】アセンブリの迷宮から「特定の部品」を一瞬で救い出す!ワイルドカード検索術
こんにちは。SOLIDWORKS自動化の世界へようこそ。
アセンブリを開いて「あれ、あのネジ部品どこだっけ?」「同じ名前の部品が100個あって選択するだけで日が暮れる…」と嘆いたことはありませんか?
マクロの記録ボタンを押して終わりの段階は卒業です。今日は、「名前の一部が一致するコンポーネントを、VBAで一網打尽に選択する」という、実務で最も重宝する自動化の第一歩を伝授します。これさえマスターすれば、SOLIDWORKSの操作速度は劇的に変わります。
—
1. なぜ「手動選択」から脱却すべきなのか?
SOLIDWORKSのAPI(操作の裏側にある命令体系)を操る際、最も重要なのは「対象をどう特定するか」です。
人間は「目で見て」部品をクリックしますが、プログラムは「名前(文字列)」で部品を特定します。今回紹介するコードを理解すると、部品名に「BOLT-」というプレフィックス(接頭辞)が付いているものだけを抽出し、一括で合致(Mate)させたり、透明化したりといった次なるステップへ進めるようになります。
—
2. 「名前で検索」するための戦略
アセンブリの中には、数え切れないほどの部品が階層構造(ツリー)の中に存在しています。これらを一つずつ確認するのは非効率です。そこで、以下の手順を踏みます。
1. アセンブリ全体(Root)にアクセスする
2. 構成部品(Component)を一つずつ順番に巡回する
3. 名前の中に特定の文字列が含まれているかチェックする
4. 該当するものだけを「選択(Select)」する
—
3. 実践コード:ワイルドカード検索マクロ
以下のコードをVBAエディタに貼り付けてください。`targetKeyword` の値を書き換えるだけで、どんな部品も検索可能です。
Option Explicit
Sub SelectComponentsByKeyword()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim vComps As Variant
Dim i As Long
Dim targetKeyword As String
‘ 1. 初期設定
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
‘ 2. 検索したいキーワードを設定(ここを自由に変えてください)
targetKeyword = “BOLT” ‘ 例:名前に”BOLT”を含む部品を検索
‘ 3. アセンブリ内の全構成部品を取得
vComps = swAssy.GetComponents(False)
‘ 選択状態をクリア(前回の選択が残らないようにする)
swModel.ClearSelection2 True
‘ 4. 構成部品をループ処理
For i = 0 To UBound(vComps)
Set swComp = vComps(i)
‘ InStr関数:名前の中にキーワードが含まれているか判定
‘ 0より大きければ「含まれている」と判断
If InStr(1, swComp.Name2, targetKeyword, vbTextCompare) > 0 Then
‘ 選択(Append:=Trueで複数選択を維持)
swComp.Select4 True, Nothing, False
End If
Next i
MsgBox “検索完了!該当する部品を選択しました。”
End Sub
—
4. 初心者がハマりやすい「3つの罠」
このコードを書く上で、以下のポイントだけは覚えておいてください。
- `ClearSelection2 True` の重要性:
これがないと、前に選択していた部品が選択されたままになり、作業ミスに繋がります。「選択する前には必ず一度クリアする」。これが自動化の礼儀です。
- `vbTextCompare` の魔法:
`InStr` 関数の引数にこれを指定すると、大文字と小文字を区別しません。「bolt」と書いても「BOLT」を見つけてくれます。ユーザーの入力ミスをカバーする優しさです。
- `GetComponents(False)`:
`False` を指定することで、アセンブリ直下だけでなく、サブアセンブリ内の部品まで再帰的に取得してくれます。ここを `True` にすると、直下の部品しか見てくれないので注意が必要です。
—
5. 次のステップへ
「部品を選択できた」ということは、次は「その部品を非表示にする」「特定の座標に移動させる」「色を変える」といった操作が可能になったことを意味します。
まずはこのコードを動かし、自分の環境でどう動くかを確かめてみてください。エラーが出たら、それはシステムがあなたに何かを教えてくれている証拠です。
SOLIDWORKS VBAの世界へようこそ。ここから、あなたの定時退社ライフが始まりますよ。何か詰まったら、いつでもまた聞きに来てくださいね。
