シンプルなExcelVBAスクリプトを使用してすべてのPC情報を表示する方法
コンピュータのCPUまたはメモリの詳細、シリアル番号またはモデル番号、またはインストールされているソフトウェアバージョンを知る必要がありましたが、どこを見ればよいかわからなかったことがありますか? Excelの簡単なコードを少し使用するだけで、WindowsPC情報のライブラリ全体を抽出できます。
良すぎて真実ではないですか?使用方法を知っていれば、それはWindowsです。
手を少し汚す必要があるかもしれませんが、この記事では、必要なすべてのコードと、それをExcelに入れて機能させる方法を説明します。完了すると、Excelシートが作成されます。このシートを開くたびに、コンピュータシステムについて知りたいことをすべて説明しています。
これは、Officeの無料試用版で入手できるデスクトップバージョンのExcelでのみ機能することに注意してください。
WMIの魔法
Microsoftオペレーティングシステムを実行しているすべてのコンピューターで、Windows Management Instrumentation(WMI)と呼ばれる強力な拡張機能のセットにアクセスできます。これにより、コンピューター、オペレーティングシステム、およびインストールされているコンピューターに関する情報と仕様にアクセスするための非常に強力で広範な方法が提供されます。ソフトウェア。
何よりも、WMIは、ほぼすべてのMicrosoftOffice製品で利用可能なVBAなどのプログラミング言語からアクセスできます。
まず、新しいExcelブックを作成し、MyComputerInfo。xlsmのような名前を付けます。 (マクロが有効)。それを開き、Sheet1をスキップして、次の11枚のシートの名前を次のように変更します。
- ネットワーク
- LogicalDisk
- プロセッサ
- 物理メモリ
- ビデオコントローラー
- OnBoardDevices
- オペレーティングシステム
- プリンター
- ソフトウェア
- アカウント
- サービス
これらはすべてのコンピューターの詳細を保持し、このExcelスプレッドシートを開くたびに更新されます。
次に、開発者に移動します メニュー項目とコントロールの下 セクションをクリックしてコードを表示 。
[開発者]メニュー項目が表示されない場合は、[ファイル>]をクリックします オプション> リボンのカスタマイズ 、コマンドの選択を変更します すべてのタブへのドロップダウン 、開発者を選択します 追加>>を押します ボタンをクリックして、カスタマイズされたリボン側に追加します。追加したら、その側の[開発者]チェックボックスが選択されていることを確認してください。
VBAコードエディタに入ったら、以下のスクリプトをモジュールに追加するだけです。これらのスクリプトは、すべての面倒な作業を行います。このコードを自分で作成する必要はありません。以下に示すように、コピーして貼り付けるだけです。
次のセクションのコードを使用してコピーと貼り付けが完了したら、シートをロードするためのコードをもう少し追加するだけで完了です。
さて、コピーして貼り付ける準備はできましたか?始めましょう。
WMIモジュールの構築
このコードのインスピレーションは、BeyondExcelと呼ばれる素晴らしいGoogleサイトリソースから来ています。示されている例には、WMI()というサブルーチンがあります。このサブルーチンは、コンピューターのすべてのネットワーク情報をExcelプログラミング環境のデバッグ領域に渡します。
もちろん、そこではあまり役に立たないので、代わりにこのガイドの最初のステップで作成したシートの1つにすべての詳細を出力するようにコードを変更しました。
コーディングナビゲーション領域には、モジュールというセクションも表示されます。 およびModule1と呼ばれるコンポーネント 。これをダブルクリックして開きます。 Modulesフォルダーが表示されない場合は、挿入を展開します。 メニューからモジュールを選択します 。
この領域には、WMIを使用してコンピューターに関するすべての重要な情報を取得し、作成したシートに読み込むすべてのサブルーチンがあります。
次の行をすべてコードウィンドウの最上部に配置します。
Public oWMISrvEx As Object 'SWbemServicesEx
Public oWMIObjSet As Object 'SWbemServicesObjectSet
Public oWMIObjEx As Object 'SWbemObjectEx
Public oWMIProp As Object 'SWbemProperty
Public sWQL As String 'WQL Statement
Public n
完了すると、次のようになります。
次のコードを貼り付けます 作成した行の下のModule1に:
Sub NetworkWMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)
intRow = 2
strRow = Str(intRow)
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
For Each oWMIObjEx In oWMIObjSet
For Each oWMIProp In oWMIObjEx.Properties_
If Not IsNull(oWMIProp.Value) Then
If IsArray(oWMIProp.Value) Then
For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
Next
Else
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
intRow = intRow + 1
strRow = Str(intRow)
End If
End If
Next
'End If
Next
End Sub
ここで、このガイドの最初の部分で作成したすべてのシートに対して、これと同じ関数を作成しますが、いくつかの小さな違いがあります。
たとえば、次に、上記のコードを NetworkWMI()にコピーします。 、そのコードの末尾の下に貼り付けてから、「NetworkWMI()」を「LogicalDiskWMI()」に置き換えます
このコードが正しいシートに入力されるように変更する必要があるセクションはわずかです。
これを変更する:
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
これへ:
sWQL = "Select * From Win32_LogicalDisk"
次の4行を変更します:
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"
ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("Network").Range("B1").Value = "Value"
ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
これへ:
ThisWorkbook.Sheets("LogicalDisk").Range("A1").Value = "Name"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 1).Font.Bold = True
ThisWorkbook.Sheets("LogicalDisk").Range("B1").Value = "Value"
ThisWorkbook.Sheets("LogicalDisk").Cells(1, 2).Font.Bold = True
次の2行を変更します:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
これへ:
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
そしてこれらの3行:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
これへ:
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.Name
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value
ThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
これで、ほぼ完了です!
ブックのすべてのタブについて上記を繰り返します。機能は次のとおりです。
- 「Processor」シートの「ProcessorWMI()」。
- 「PhysicalMemory」シートの「PhysicalMemWMI()」。
- 「ビデオコントローラ」シートの「VideoControlWMI()」。
- 「OnBoardDevices」シートの「OnBoardWMI()」。
- 「Printer」シートの「PrinterWMI()」。
- オペレーティングシステムシートの「OperatingWMI()」。
- 「ソフトウェア」シートの「SoftwareWMI()」。
- 「サービス」シートの「ServicesWMI()」。
コンピュータに関するこの情報にアクセスするために使用する必要がある特別な「Win32_」オブジェクトは次のとおりです。
- Win32_NetworkAdapterConfiguration-すべてのネットワーク構成設定
- Win32_LogicalDisk-容量と空き容量のあるディスク。
- Win32_Processor-CPU仕様
- Win32_PhysicalMemoryArray-RAM/インストール済みメモリサイズ
- Win32_VideoController-グラフィックアダプタと設定
- Win32_OnBoardDevice-マザーボードデバイス
- Win32_OperatingSystem-シリアル番号のあるWindowsのバージョン
- WIN32_Printer-インストールされているプリンター
- Win32_Product-インストールされているソフトウェア
- Win32_BaseService-任意のPCで実行中(または停止中)のサービスを、サービスのパスとファイル名とともに一覧表示します。
Module1 でこれらの各機能のコピー/貼り付け、調整を完了します コードの領域。完了したら、このガイドの次のセクションに進んでください。
VBビューにコードを保存することを忘れないでください!最初にワークブックを.xlsで保存した場合 ファイルタイプの場合、Excelは .xlsmなどのマクロ対応のファイルタイプを使用するように要求するようになりました。 。
これらの強力な関数がすべて作成されたので、あとはブックを開くたびにそれらを実行するだけです。これを行うのは本当に簡単です。
左側のオブジェクトブラウザのMicrosoftExcelオブジェクトの下 、 ThisWorkbookが表示されます 。そのオブジェクトをダブルクリックして開きます。
コード領域の上部に2つのドロップダウンボックスがあり、左側の1つをワークブックに変更します。 そして開くに適切なもの 。
Private Sub Workbook_Open()と呼ばれる自動的に生成された関数が表示されます。 。
ここに、次のコード行を入力します したがって、関数は次のようになります。
Private Sub Workbook_Open()
NetworkWMI
LogicalDiskWMI
ProcessorWMI
PhysicalMemWMI
VideoControlWMI
OnBoardWMI
PrinterWMI
SoftwareWMI
OperatingWMI
ServicesWMI
End Sub
これで、ブックを開くたびに、新しく作成された各関数が呼び出され、コンピューターからすべてのデータが取得され、適切なシートに読み込まれます。
実際の動作を確認するには、コードを保存し、コードウィンドウを閉じ、ブックを保存して、それも閉じます。閉じたばかりのファイルを再度開くと、すべてのシートにコンピューターに関する大量のデータが含まれていることがわかります。
ブックにはマクロが含まれているため、セキュリティ上の理由から無効にすることができるため、コンテンツを有効にするをクリックする必要がある場合があります。 収集するデータについては、シートの上部にあります。
警告-大量のデータを収集するため、最初にファイルを開いたときにデータが読み込まれるまで数分待つ必要があります。
これにWMIを使用することの驚くべき点は、上記のデータが氷山の一角にすぎないことです。コンピュータシステムのあらゆる側面に関する情報を含む、利用可能なWMIクラスがさらに数百あります。
冒険心があり、これをさらに一歩進めたい場合は、ワークブックの最初のシートをダッシュボードに変え、他のシートのデータを使用してそのダッシュボードにフィードすることができます。
要するに、この新しいツールを使用すると、ほとんどのIT専門家がコンピュータシステムについて利用できるとさえ認識しているよりも多くの情報を収集して表示できるようになり、それらの時間の何分の1かでそれを実行できるようになります。同じ専門家が、コントロールパネルと管理領域を掘り下げてそれらの詳細を検索します。
このようなツールを作成して使用していると思いますか?あなたはVBAプログラマーであり、WMIクラスを使用したことがありますか? 以下のコメントセクションであなた自身の経験やアイデアを共有してください!
画像クレジット:Shutterstock.com経由のAdriano Castelli、Shutterstock経由のMclek
-
Windows 11 でマイク、位置情報、またはカメラを使用しているアプリを確認する方法
コンピューターに Windows 11 がインストールされている場合は、カメラを使用してビデオ通話を行ったり、マイクを使用して曲を録音したりできるアプリが多数あることをご存知でしょう。ただし、使用していないときにすべてのアプリがカメラやマイクを使用するわけではありません。 デジタル時代の多くの人々の生活において、プライバシーはますます重要になっています。ウェブカメラのカメラをテープで覆う人もいれば、PC のマイクをテープで覆ったり、完全に取り除いたりする人もいます。 これらはすべて、プライバシーを保護するための理解できるアプローチです。特に、ユーザーの位置やその他の使用状況を追跡する技術が
-
Windows 10 でウェブカメラを使用しているアプリを確認する方法
Windows 10 の 2019 年 5 月の機能更新により、Web カメラの設定ページが大幅に改善されました。 Windows では、カメラを使用しているアプリを確認できるようにすることで、より多くのプライバシーを提供できるようになりました。ウェブカメラ インジケーターが予期せず点灯した場合は、犯人をすぐに特定できるはずです。 アプリのリストは、Windows の既存のカメラ プライバシー設定ページにあります。見つけるには、[スタート] メニューから [設定] アプリを開きます (または、Win+I キーボード ショートカットを使用します)。設定ホームページから、[プライバシー] タイル