
2日悩みましたが、解決策が見つからないため質問させて頂きます。
現在、ExcelのVBAを使った表を作成しております。
編集者が誰なのかをはっきりさせるため、項目の新規追加・情報の削除を行った編集者のIPアドレスを履歴として残したいと思っています。(閲覧履歴は不要です。)
そのため、編集者PCのIPアドレスを取得してそれを履歴一覧に残したいのですが、この方法がわかりません。
いろいろと探しましたが、WMI(?)やWSH(?)等の、私の理解をはるかに超えるものしか見つからず困っております。
このようなことはできないのでしょうか?
もし可能であれば、教えて下さい。
環境は
OS:Windows XP
Excel2000です。
宜しくお願いします。
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
この回答への補足
ご回答ありがとうございます!
IPアドレスが正常に取得でき、デフォルトゲートウェイを指定するというのは、目からウロコです。
このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか?
初歩的な質問で申し訳ございません。
宜しくお願い致します。
No.4
- 回答日時:
No.2です。
>このコードですと、メッセージボックスに表示されることになりますが、これをセルに書き込むのはどうすれば良いのでしょうか?
サンプルコードでは、strIp と言う変数に文字列としてIPを入れていますので、たとえばA1セルにこのIPを入れたいのでしたら、Range("A1") = strIP でIPアドレスがセルに反映されます。
何度もありがとうございました!!
考えていた通りの結果を得ることができました。
またわからないことがありましたら、宜しくお願いします。
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
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
この回答への補足
早速のご回答ありがとうございます!
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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【エクセル】IF関数 Aまたは...
-
Excel 例A(1+9) のように番地の...
-
数式を残したまま、別のセルに...
-
エクセルの一つのセルに複数の...
-
(Excel)数字記入セルの数値の後...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
エクセルのセルの枠を超えて文...
-
アニメの原画について
-
EXCELで右詰の数値でセルを(左...
-
セルをクリック⇒そのセルに入力...
-
エクセルの書式設定の表示形式...
-
エクセルで指定したセルのどれ...
-
エクセルで縦に1112223...
-
Excelについて(セル内の文字を...
-
Excelで教えてください。 バー...
-
エクセル オートフィルタで絞...
-
どなたかおねがいします。 1つ...
-
VLOOKUPとハイパーリンクの組み...
-
エクセルで「コピー領域と貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
数式を残したまま、別のセルに...
-
Excel for Mac使用中ポインタが...
-
Excel 例A(1+9) のように番地の...
-
セルをクリック⇒そのセルに入力...
-
エクセルの書式設定の表示形式...
-
枠に収まらない文字を非表示に...
-
エクセル オートフィルタで絞...
-
対象セル内(複数)が埋まった...
-
【エクセル】IF関数 Aまたは...
-
(Excel)数字記入セルの数値の後...
-
エクセルのセルの枠を超えて文...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
公共建築工事 共通仮設費率 エ...
-
Excelで数式内の文字色を一部だ...
-
Excelで教えてください。 バー...
-
エクセルの一つのセルに複数の...
-
Excel2003 の『コメント』の編...
おすすめ情報