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

スポンサーリンク

【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の世界へようこそ。ここから、あなたの定時退社ライフが始まりますよ。何か詰まったら、いつでもまた聞きに来てくださいね。

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