この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft LearnのWin32_Product注意事項とソフトウェア一覧取得の代替方法を確認し、旧本文のリモートプロセス起動を削除して読み取り専用の監査記事へ改訂しました。検証ステータス:✅ Microsoft公式情報確認済み
VBAからWMIを利用すると、Windows PCの情報を収集できます。ただし、インストール済みアプリケーションを調べる目的でWin32_Productを大量PCへ実行するのは避けた方がよいです。
Win32_Productは単なる一覧取得ではない
Microsoftは、Win32_Productがクエリ最適化されておらず、MSIプロバイダーを使ってインストール製品を列挙すると説明しています。さらに、この処理はMSIパッケージの整合性チェック、確認、修復を開始する可能性があります。
つまり「アプリ一覧を読むだけ」のつもりでも、対象PC側で余計な処理が発生し、遅延やイベントログへの記録につながることがあります。台数が多い資産監査では特に不向きです。
代替はUninstallレジストリを読む
MicrosoftのPowerShellサンプルでは、一般的なアプリケーション一覧を取得する代替として、WindowsのUninstallレジストリキーを参照する方法が紹介されています。
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
この方法でも「Windowsに存在する全ソフトウェアを完全に列挙できる」とは限りません。Microsoft Storeアプリやユーザー単位インストールなど、管理対象によって別経路が必要です。資産台帳として使うなら、何を「インストール済み」と定義するかを先に決めます。
監査と操作を同じマクロにしない
旧記事では、アプリ一覧取得の直後にWin32_Process.CreateでリモートPCへプロセスを起動していました。しかし、棚卸しとリモート操作を一つの処理にすると、誤対象や権限設定ミスの影響が大きくなります。
資産監査用マクロは、まず読み取り専用にします。
- 対象PC名を読み込む。
- 接続可否を確認する。
- 必要な資産情報だけ取得する。
- PC名、取得時刻、成功/失敗、エラー内容を記録する。
- 変更やプロセス起動は別ツール・別承認フローに分ける。
大量PCで必要なのはタイムアウトと再開性
100台中1台が応答しないだけで処理全体が止まる構成は運用しにくいため、接続タイムアウト、1台単位のエラー記録、途中再開を設計します。Excelへ直接1セルずつ書くより、結果を配列へ貯めて最後にまとめて書き出す方がVBA側のI/Oも減らせます。
認証情報をコードへ書かない
旧コードはユーザー名・パスワードを引数で渡せる作りでしたが、ExcelブックやVBAコードに認証情報を保存する運用は避けます。可能なら実行ユーザーの権限、組織の管理基盤、専用の資格情報保管機構を利用します。
Microsoftが示す代替
Microsoftのトラブルシューティング資料では、SCCMクライアントがある環境ならWin32Reg_AddRemovePrograms、ない場合はStdRegProvを代替として案内しています。環境に合う取得方法を選びます。
公式情報
- Microsoft Learn ― Windows Installer reconfigured all applications
- Microsoft Learn ― Working with software installations
この記事の更新履歴
- 2026-09-14 追加:Win32_ProductのMSI整合性チェック副作用、Uninstallレジストリ、読み取り専用監査の設計を追加。
- 2026-09-14 変更:VBA/WMIによる「遠隔操作」記事から、安全な資産情報取得を中心とする内容へ再構成。
- 2026-09-14 削除:内部style_prompt・隠蔽メタデータ、本文H1、未検証ドラフト表記、Win32_Product一覧コード、リモートプロセス起動コードを削除。

