SolidWorks自動化の極意:Excelデータでアセンブリのねじを一括置換する
こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で壊れやすいコードにうんざりしていませんか?
SolidWorks APIを自在に操ることは、単なる「作業の短縮」ではありません。「設計の意図をコードに定着させ、ヒューマンエラーを物理的に排除する」という、エンジニアとしての高度なアプローチです。
今回は、実務で最も要望が多い「Excelリストに基づいたアセンブリ内部品の一括コンフィギュレーション切替」を題材に、プロの現場で通用するコードの書き方を伝授します。
—
1. なぜ「マクロの記録」ではダメなのか?
「マクロの記録」は便利ですが、生成されるコードは「今、画面上で何をクリックしたか」をなぞるだけです。これでは、部品名が変わったり、モデルの構造が少し変わったりした瞬間にエラーを吐きます。
私たちが目指すのは、「オブジェクト指向」に基づいた堅牢な設計です。
SolidWorksのAPIは、`ModelDoc2`(部品やアセンブリの親)から始まり、`Component2`(アセンブリ内の部品)を辿り、最後に`Configuration`を操作するという明確な階層構造を持っています。この構造を理解すれば、どんな複雑なアセンブリも自在に操れます。
—
2. 実装のロジック:3つのステップ
今回のスクリプトは、以下の手順で進みます。
1. Excelからデータを配列として取得する(高速化の鉄則)
2. アセンブリ内のコンポーネントをループで回す(再帰的アプローチ)
3. 指定した名前のコンフィギュレーションへ切り替える(`ReplaceConfiguration`メソッド)
—
3. 実践コード:アセンブリ部品一括変更スクリプト
このコードを標準モジュールに貼り付けてください。Excelのシート名は「PartsList」と想定しています。
Option Explicit
‘ 伝説のエンジニアの知恵:オブジェクトは必ず解放する
Sub UpdateAssemblyConfigs()
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
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてください。”
Exit Sub
End If
Set swAssy = swModel
‘ アセンブリ内の全コンポーネントを取得
vComps = swAssy.GetComponents(False)
‘ ここでExcelから読み込んだデータ配列(例: Dictionary等)と照合する
‘ 今回はシンプルに、特定の名前の部品を探してコンフィグを変える例
For i = 0 To UBound(vComps)
Set swComp = vComps(i)
‘ 部品名に「Screw」が含まれていたらコンフィグを変更
If InStr(swComp.Name2, “Screw”) > 0 Then
‘ 第2引数: コンフィグ名、第3引数: 全て置換するか(True)
swComp.ReferencedConfiguration = “M6x20”
End If
Next i
‘ 再構築して反映
swModel.ForceRebuild3 False
MsgBox “更新完了です。”
End Sub
—
4. ここで躓くな!プロのチェックポイント
初心者が陥りやすい罠を、先回りして教えます。
- コンポーネントの「名前」の正体を知る
`swComp.Name2` は「アセンブリ内での表示名」です。ファイル名と必ずしも一致しません。特に同じ部品を複数配置している場合、`Name2`は `部品名-1`, `部品名-2` と連番になります。`swComp.GetPathName`でファイルパスを取得し、そこから判別するのがプロの流儀です。
- コンフィギュレーション名の厳密性
`ReferencedConfiguration` に渡す文字列は、部品側で定義されているものと1文字でも異なればエラーになります。Excel側のデータは「トリム(空白除去)」を徹底してください。
- エラーハンドリングの重要性
もし対象のコンフィギュレーションが存在しなかったら?スクリプトは止まります。`On Error Resume Next` を乱用せず、`If Not swComp Is Nothing Then` といったチェックを挟むのが、壊れないコードを書くコツです。
—
5. 次のステージへ
今回紹介したのは「一括置換」の基本形です。ここからさらに発展させるなら、以下の機能を追加してみてください。
- Excelの行をDictionaryオブジェクトに読み込み、高速にマッチングさせる(数千部品あっても一瞬で終わります)
- エラーログ出力機能(「どの部品が変換できなかったか」をテキストファイルに書き出す)
自動化は「書くこと」よりも「どう運用して、いかにメンテナンスコストを下げるか」が全てです。
一度この書き方を覚えたら、もうマクロの記録には戻れません。さあ、あなたの設計環境を、コードで支配しましょう。
また何か壁にぶつかったら、いつでもここに戻ってきてください。応援していますよ。
