• ベストアンサー

ExcelのVBAを使った自IPアドレスの取得

2日悩みましたが、解決策が見つからないため質問させて頂きます。 現在、ExcelのVBAを使った表を作成しております。 編集者が誰なのかをはっきりさせるため、項目の新規追加・情報の削除を行った編集者のIPアドレスを履歴として残したいと思っています。(閲覧履歴は不要です。) そのため、編集者PCのIPアドレスを取得してそれを履歴一覧に残したいのですが、この方法がわかりません。 いろいろと探しましたが、WMI(?)やWSH(?)等の、私の理解をはるかに超えるものしか見つからず困っております。 このようなことはできないのでしょうか? もし可能であれば、教えて下さい。 環境は OS:Windows XP Excel2000です。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

取得したいアダプタのDefaultGatewayが判っているならWMIを使ったこんなのはどうでしょう。 1つのアダプタに複数のIPが割り当てられている場合等は考慮していません。 また、サンプルなので変数宣言やエラー処理も適当です。 Sub Sample()  strDefaultGateway = "192.168.50.254" '←DefaultGatewayがコレのIPを調べる  strIp = "該当無し"  Set objNic = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where (IPEnabled = TRUE)")  For Each oneNic In objNic   'DefaultGatewayの設定が無いNICは無視   If IsError(oneNic.DefaultIPGateway(0)) = False Then    strChk = oneNic.DefaultIPGateway(0)    If InStr(strChk, strDefaultGateway) > 0 Then     strIp = oneNic.ipaddress(0)     Exit For    End If   End If  Next  MsgBox "IPアドレス:" & strIp End Sub

99ea09b206
質問者

補足

ご回答ありがとうございます! IPアドレスが正常に取得でき、デフォルトゲートウェイを指定するというのは、目からウロコです。 このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか? 初歩的な質問で申し訳ございません。 宜しくお願い致します。

その他の回答 (3)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

No.2です。 >このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか? サンプルコードでは、strIp と言う変数に文字列としてIPを入れていますので、たとえばA1セルにこのIPを入れたいのでしたら、Range("A1") = strIP でIPアドレスがセルに反映されます。

99ea09b206
質問者

お礼

何度もありがとうございました!! 考えていた通りの結果を得ることができました。 またわからないことがありましたら、宜しくお願いします。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.3

先程は、 ipconfig の結果をそのまま表示していましたが、 途中で、(3) に判定文を挿入し、IP Address だけを表示 するようにしました。 また、先程は、出力する項目ごとに改行していましたが、 (2) のように、特定のセルだけに出力しています。 最後の IP Address 情報だけ残せば良いということなので、 すべての IP Address 情報が上書き、上書きで表示されて いくので、最後に表示された IP Address が残ることになります。 Sub Sample2() Dim WSH, wExec, sCmd As String, Result As String, tmp, i As Long Set WSH = CreateObject("WScript.Shell") sCmd = "ipconfig "       ''(1) Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 DoEvents Loop Result = wExec.StdOut.ReadAll tmp = Split(Result, vbCrLf) For i = 0 To UBound(tmp) If InStr(tmp(i), "IP Address") > 0 Then     ''(3) Cells(20, 1) = tmp(i)         ''(2) End If Next i Set wExec = Nothing Set WSH = Nothing End Sub

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

一例です。  (1) のところで、 ipconfig  コマンドを設定しています。  この ipconfig の実行結果を (2) のところで、セルに貼り付けています。 Sub Sample2() Dim WSH, wExec, sCmd As String, Result As String, tmp, i As Long Set WSH = CreateObject("WScript.Shell") sCmd = "ipconfig "    ''(1) Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 DoEvents Loop Result = wExec.StdOut.ReadAll tmp = Split(Result, vbCrLf) For i = 0 To UBound(tmp) Cells(i + 1, 1) = tmp(i)     ''(2) Next i Set wExec = Nothing Set WSH = Nothing End Sub

99ea09b206
質問者

補足

早速のご回答ありがとうございます! IPアドレスを無事に取得することができました! しかし、思わぬ結果となり、引き続き教えて頂けないでしょうか。 当方、仮想のネットワークアダプタがインストールされており、 IPアドレスが3つ取得されてしまいます。 また、仮想のネットワークアダプタがインストールされていない ユーザもいます。 できれば、他の言葉やスペースも削りたいです。 本当に必要なものは、最後のローカルアダプタ内の『192.168.50.18』の部分だけとなります。 ローカルアダプタは、常に最後に表示されるようです。 このような場合、どうにかなるものでしょうか? 引き続き、宜しくお願い致します。 "Windows IP Configuration " " "Ethernet adapter VMware Network Adapter VMnet8: " " " Connection-specific DNS Suffix . : " " IP Address. . . . . . . . . . . . : 192.168.153.1 " " Subnet Mask . . . . . . . . . . . : 255.255.255.0 " " Default Gateway . . . . . . . . . : " " "Ethernet adapter VMware Network Adapter VMnet1: " " " Connection-specific DNS Suffix . : " " IP Address. . . . . . . . . . . . : 192.168.32.1 " " Subnet Mask . . . . . . . . . . . : 255.255.255.0 " " Default Gateway . . . . . . . . . : " " "Ethernet adapter ローカル エリア接続: " " " Connection-specific DNS Suffix . : " " IP Address. . . . . . . . . . . . : 192.168.50.18  ←ここだけです。 " " Subnet Mask . . . . . . . . . . . : 255.255.255.0 " " Default Gateway . . . . . . . . . : 192.168.50.254

関連するQ&A