VBA技術解説
PCの固有情報の取得(ユーザー名、コンピューター名等々)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2025-09-16 最終更新日:2025-09-16

PCの固有情報の取得(ユーザー名、コンピューター名等々)


PCのユーザー名で何かしらの処理をしようとするなら、そもそもユーザー名が重複しないことを確認しておいた方が良いです。
しかし多くの場合、重複する可能性があるものです。
そこで、重複したのでは都合が悪いのなら、他の情報も合せて取得してつかうようにします。
・ユーザー名
・コンピューター名
・シリアル番号
・UUID
・MACアドレス


これらの情報を取得するVBAの紹介です。


PCの固有情報の取得のVBAについて

このマクロは、PCが持つ固有の情報を自動で取得し、その結果を表示するためのツールです。
PCの「身分証明書」のような情報を集めると考えると分かりやすいでしょう。

取得する情報

このマクロは、以下の5つの情報を取得します。
  1. ユーザー名: 現在PCにログインしているユーザーの名前です。
  2. ホスト名: ネットワーク上でPCを識別するために付けられた名前です。
  3. シリアル番号: PCメーカーが個々のPCに割り当てた、世界に一つしかない製造番号です。
  4. UUID (GUID): PCのマザーボードに紐づく、非常に長い固有の識別子です。
  5. MACアドレス: ネットワークアダプター(LANカードなど)に割り当てられた、世界に一つしかない物理的な住所のようなものです。

これらの情報は、PCを特定したり、会社の資産として管理したり、あるいはネットワークのトラブルシューティングを行ったりする際に非常に重要です。

動作の仕組み

このマクロは、Windowsに元々備わっている「WMI (Windows Management Instrumentation)」という機能を利用しています。
WMIは、Windowsの様々な情報を取得するための窓口です。

このマクロは、特別な設定(参照設定)をすることなく、VBA(Visual Basic for Applications)のコードだけでWMIにアクセスします。
これを「遅延バインディング」と呼び、どのPCでもマクロをそのまま実行できるという利点があります。

実行するとどうなるか

マクロを実行すると、VBAエディタのイミディエイトウィンドウ(通常は画面の下部にあります)に、取得した情報が順に表示されます。

もし、何らかの理由で情報が取得できなかった場合(例:管理者権限の不足)、エラーメッセージが表示されます。
これは、問題が発生してもマクロが途中で止まらないようにするための仕組みです。

このマクロを使えば、コマンドプロンプトやシステムの設定画面を何度も開くことなく、必要なPC情報を一括で簡単に確認することができます。

・ユーザー名・コンピューター名・シリアル番号・UUID・MACアドレス


PCの固有情報の取得のVBAコード

'---------------------------------------------------------------------------------------------------
' プロシージャ名: GetSystemInfo
' 目的: PCの固有情報を取得し、イミディエイトウィンドウに表示します。
' 備考: このコードは、VBAの参照設定を必要としない「遅延バインディング」で記述されています。
'    どのPCでも特別な設定なしに実行可能です。
'---------------------------------------------------------------------------------------------------
Sub GetSystemInfo()

  '-----------------------
  ' ユーザー名とホスト名
  '-----------------------
  Debug.Print "■ ユーザー名とホスト名"
  Debug.Print "ユーザー名: " & Environ("USERNAME")
  Debug.Print "ホスト名: " & Environ("COMPUTERNAME")
  Debug.Print "-----------------------"
  
  '-----------------------
  ' WMI関連の変数宣言
  '-----------------------
  ' WMIオブジェクトは、すべて「Object」型で宣言します。
  Dim objLocator As Object
  Dim objWMIService As Object
  Dim colItems As Object
  Dim objItem As Object
  
  ' エラーハンドリング
  On Error GoTo ErrorHandler
  
  '-----------------------
  ' WMIへの接続(遅延バインディング)
  '-----------------------
  ' CreateObjectを使用して、WMIサービスに動的に接続します。
  ' これにより、参照設定が不要になります。
  Set objLocator = CreateObject("WbemScripting.SWbemLocator")
  Set objWMIService = objLocator.ConnectServer()
  
  '-----------------------
  ' シリアル番号の取得
  '-----------------------
  Debug.Print "■ シリアル番号"
  Set colItems = objWMIService.ExecQuery("Select * From Win32_BIOS")
  If colItems.count > 0 Then
    For Each objItem In colItems
      Debug.Print "シリアル番号: " & objItem.SerialNumber
    Next
  Else
    Debug.Print "シリアル番号: 取得できませんでした。"
  End If
  Debug.Print "-----------------------"
  
  '-----------------------
  ' UUIDの取得
  '-----------------------
  Debug.Print "■ UUID"
  Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystemProduct")
  If colItems.count > 0 Then
    For Each objItem In colItems
      Debug.Print "UUID: " & objItem.UUID
    Next
  Else
    Debug.Print "UUID: 取得できませんでした。"
  End If
  Debug.Print "-----------------------"
  
  '-----------------------
  ' MACアドレスの取得
  '-----------------------
  Debug.Print "■ MACアドレス"
  Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
  If colItems.count > 0 Then
    For Each objItem In colItems
      If Not IsNull(objItem.MACAddress) Then
        Debug.Print "MACアドレス: " & objItem.MACAddress
      End If
    Next
  Else
    Debug.Print "MACアドレス: 取得できませんでした。"
  End If
  
CleanUp:
  ' オブジェクトの破棄
  Set objLocator = Nothing
  Set objWMIService = Nothing
  Set colItems = Nothing
  Set objItem = Nothing
  Exit Sub
  
ErrorHandler:
  ' エラーメッセージ
  MsgBox "エラーが発生しました: " & Err.Description & vbCrLf & _
      "管理者権限でExcelを実行しているか確認してください。", vbCritical
  Resume CleanUp
  
End Sub


※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。





同じテーマ「マクロVBA技術解説」の記事

印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)
Excel VBAとは?マクロとの違いやメリット・デメリットを初心者向けに解説
『演算子 + オペランド』から始めるVBA学習
PCの固有情報の取得(ユーザー名、コンピューター名等々)
ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ