電子書籍の厳選無料作品が豊富!

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

A 回答 (4件)

取得したいアダプタの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

この回答への補足

ご回答ありがとうございます!
IPアドレスが正常に取得でき、デフォルトゲートウェイを指定するというのは、目からウロコです。

このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか?
初歩的な質問で申し訳ございません。
宜しくお願い致します。

補足日時:2009/07/11 15:08
    • good
    • 0

No.2です。



>このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか?

サンプルコードでは、strIp と言う変数に文字列としてIPを入れていますので、たとえばA1セルにこのIPを入れたいのでしたら、Range("A1") = strIP でIPアドレスがセルに反映されます。
    • good
    • 0
この回答へのお礼

何度もありがとうございました!!
考えていた通りの結果を得ることができました。

またわからないことがありましたら、宜しくお願いします。

お礼日時:2009/07/12 10:52

先程は、 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
    • good
    • 0

一例です。



 (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

この回答への補足

早速のご回答ありがとうございます!
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

補足日時:2009/07/10 14:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!