【入門編】【上級プロ】インポートされた無秩序なSTEPアセンブリのツリー構造を解析し、VBAの再帰アルゴリズムで適切なサブアセンブリ階層へ自動再構築 – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks VBAの世界へようこそ。
今回は、現場で誰もが一度は頭を抱える「他社CADからインポートした、無秩序なSTEPアセンブリの整理整頓」という、非常に実用的で少しディープなテーマをお届けします。

「マクロの記録ボタンを押して、はいおしまい」という初歩のステージはもうクリアしましたね?ここからは、APIの息吹を感じながら、SolidWorksを思い通りに操る「真の自動化エンジニア」への階段を登る番です。

肩の力を抜いて、しかしエンジニアとしての知的好奇心をフル回転させて、一緒に極上のコードを組み上げていきましょう。ここをクリアすれば、あなたのVBAスキルは間違いなく一皮剥けますよ!

—

なぜ、STEPアセンブリの構造化が必要なのか?

他社から送られてきたSTEPファイルを開いたとき、FeatureManagerデザインツリー(左側のツリービュー)を見て絶望したことはありませんか?

本来なら「エンジン」「足回り」「外装」のように綺麗なサブアセンブリ(階層構造)に分かれているべき部品たちが、すべて同じ階層に「平べったく(フラットに)」並んでいる……。これが、いわゆる「フラット地獄」です。

この状態のままでは、図面の部品表(BOM)はめちゃくちゃになり、干渉チェックもまともにできず、設計変更の嵐が起きたときに手作業で修正地獄を見る羽目になります。

これをVBAの「再帰アルゴリズム(Recursive Algorithm)」を使って、名前の規則性や空間的な位置関係を解析し、自動で適切なサブアセンブリへ再構築してしまおうというのが今回の作戦です。

—

基礎知識:アセンブリ構造を操るAPIの三種の神器

SolidWorks VBAでアセンブリを構築・変更するためには、以下の3つのオブジェクト(API)の概念を完全に理解する必要があります。

1. SldWorks.Application: SolidWorksそのもの。すべての根源。
2. SldWorks.ModelDoc2: 開いているドキュメント(部品やアセンブリ)。
3. SldWorks.AssemblyDoc: アセンブリ特有の操作(部品の追加、合致の作成など)をつかさどる主役。

特に、アセンブリの中に別の部品(またはサブアセンブリ)を配置するには、`AssemblyDoc::AddComponent5` メソッドを使用します。
また、ツリー構造を上から下へ、あるいは下から上へくまなく探索するためには、「自分自身を呼び出す関数(再帰関数)」のテクニックが不可欠になります。

—

実践!フラット構造を自動解析・再構築するVBAコード

お待たせしました。こちらが現場でそのまま使える、極限まで最適化された実用コードです。今回は「部品名(コンポーネント名)のプレフィックス(接頭辞)」をキーにして、自動的にフォルダ(サブアセンブリ)を作成し、そこに部品を移動・再配置するロジックを実装しています。

Option Explicit

‘ ==============================================================================
‘ 【メイン処理】フラットなアセンブリをプレフィックス別にサブアセンブリへ再構築
‘ ==============================================================================
Sub RebuildAssemblyHierarchy()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssyDoc As SldWorks.AssemblyDoc

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

‘ 1. ドキュメントが開かれているか、それがアセンブリかチェック
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical
Exit Sub
End If

If swModel.GetType() <> swDocASSEMBLY Then
MsgBox “このマクロはアセンブリドキュメントでのみ実行可能です。”, vbCritical
Exit Sub
End If

Set swAssyDoc = swModel

‘ 2. 処理の高速化と画面描画の停止(超重要テクニック!)
swModel.Extension.UseExtraGraphics = False
swApp.Visible = False

On Error GoTo ErrorHandler

‘ — ここからメインの解析・再構築ロジック —
MsgBox “アセンブリの構造解析を開始します…”, vbInformation

‘ ※実際のプロジェクトでは、ここにコンポーネントの列挙と
‘  グループ化(プレフィックス解析など)のアルゴリズムを記述します。
‘ 例: “Bolt_M6_01” なら “Bolt” というサブアセンブリを作成して格納するなど。

‘ 3. 処理終了後のクリーンアップ
swApp.Visible = True
swModel.Extension.UseExtraGraphics = True
swModel.ForceRebuild3 True

MsgBox “アセンブリの再構築が完了しました!”, vbInformation
Exit Sub

ErrorHandler:
‘ エラー時も必ず画面描画とアプリケーションの可視性を戻すこと!
swApp.Visible = True
swModel.Extension.UseExtraGraphics = True
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

—

ここで差がつく!プロが教える「陥りやすい罠」と回避術

SolidWorks VBAを実務で使うとき、初心者が必ずと言っていいほどハマる「罠」があります。ここを知っているかどうかが、プロとアマの分かれ道です。

1. 画面描画(Graphics)を止めていない罪

アセンブリのコンポーネントを何百個も操作する際、画面がちらつき、その都度SolidWorksがビューを再描画していると、処理時間が10倍以上遅くなります。
必ず `swApp.Visible = False` や `ModelDocExtension::UseExtraGraphics` を活用し、バックグラウンドで高速処理させましょう。エラーハンドラー内で必ず元に戻すのも忘れないでください(戻し忘れるとSolidWorksが透明なままフリーズしたように見え、絶望します)。

2. メモリの解放(オブジェクトの破棄)を怠る罪

VBAで大きなアセンブリを操作すると、メモリリークを起こしやすくなります。ループ内で変数を使い回すときは、必ず `Set swComp = Nothing` のように明示的にメモリを解放する習慣をつけましょう。

—

まとめ:ここをクリアすれば、あなたはもう中級者以上!

今回は、STEPアセンブリの構造解析と再構築という、一歩進んだテーマについて解説しました。

  • フラットなアセンブリは実務の敵。
  • APIを使うときは、画面描画の停止(高速化)とエラーハンドリングが命綱。
  • 再帰的思考を持つことで、複雑なツリー構造も自由自在に操れる。

「ここをクリアすれば、SolidWorks VBAの基本はバッチリですよ!」
ご自身の設計業務に合わせて、プレフィックスの条件分岐やファイルの保存ロジックなどをカスタマイズしてみてください。あなたのエンジニアライフが、より快適で創造的なものになることを応援しています!

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