AccessなどのデータベースやVBAアプリケーションにおいて、誰が・どの端末からアクセスしたかを記録するための簡易的なアクセスログの元情報を取得するVBAコードです。
この記事でできること
- VBAを使用して、アクセス元のWindowsコンピュータ名を取得する
- アクセス元のWindowsログインユーザー名を取得する
- WMI(Windows Management Instrumentation)を利用して、端末のIPアドレスを取得する
想定環境・前提条件
- 動作確認環境:Microsoft Access / Excel (VBA) が動作する Windows 環境
- 権限:WMIクエリを実行可能な権限(通常のエンドユーザー権限で動作します)
完全なコード
Private Sub コマンド0_Click()
' コンピュータ名とユーザー名の出力
Debug.Print "コンピュータ名: " & Environ("COMPUTERNAME")
Debug.Print "ユーザー名: " & Environ("USERNAME")
' IPアドレスの出力
Debug.Print "IPアドレス: " & GetIPAddress
End Sub
Function GetIPAddress() As String
Dim NetAdapters, objNic, strIPAddress
' WMIを通じて有効なIP設定を持つネットワークアダプター情報を取得
Set NetAdapters = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"). _
ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where (IPEnabled = TRUE)")
For Each objNic In NetAdapters ' ネットワークアダプターは複数存在する場合があります
For Each strIPAddress In objNic.IPAddress ' IPアドレスは複数割り当てられている場合があります
GetIPAddress = strIPAddress
Exit For ' 最初の1件を取得して抜ける
Next
Exit For
Next
End Function
コードの要点
- Environ関数:
"COMPUTERNAME"や"USERNAME"を指定することで、OSの環境変数から手軽に端末名やユーザー名を取得できます。 - WMI (Win32_NetworkAdapterConfiguration): ローカルPCのネットワーク構成情報を照会し、有効なIPアドレスを持つアダプターからIPを取得します。複数のアダプターやIPが存在する場合を考慮し、最初の有効なアドレスを採用しています。
セキュリティ・制約
- WMIを使用したネットワーク情報の取得は、セキュリティソフトやポリシーによって制限される環境では動作しない場合があります。
- Wi-Fiや有線LANなど複数のネットワーク接続がある環境では、想定とは異なるアダプターのIPアドレスが取得される可能性があります。必要に応じて接続名などで絞り込んでください。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月27日
- 変更HTMLタグやblockquoteによる古い本文の体裁を見直し、コードブロックを使用した可読性の高い構成に変更しました。
- 追加コンピュータ名、Windowsユーザー名、IPアドレスを取得するためのVBA実行手順とコードの解説を追加しました。
