【入門編】【実務中級】複数Excel行のパラメータをもとに、ねじ部品のサイズ(構成部品コンフィギュレーション)をアセンブリ内で一括自動置換 – SolidWorks VBA解析バイブル

スポンサーリンク

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オブジェクトに読み込み、高速にマッチングさせる(数千部品あっても一瞬で終わります)
  • エラーログ出力機能(「どの部品が変換できなかったか」をテキストファイルに書き出す)

自動化は「書くこと」よりも「どう運用して、いかにメンテナンスコストを下げるか」が全てです。
一度この書き方を覚えたら、もうマクロの記録には戻れません。さあ、あなたの設計環境を、コードで支配しましょう。

また何か壁にぶつかったら、いつでもここに戻ってきてください。応援していますよ。

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