• ベストアンサー

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

  • IPアドレス取得

    IPアドレスを取得しているということはどういうことを意味しますか? 自動取得であれば、DHCPでPC側にIPアドレスを割り振って いる・・・ということになりますがIPを取得していても、その時はページの表示ができて、しばらくすると、『ページを表示できません』の表示。 IP再取得するとまた、ホームページを表示するのですが、その後しばらく、閲覧していると、ホームページの表示ができなくなります。

  • IPアドレスを取得するには

    IPアドレスで閲覧拒否をしたいと思っています。 Webページを見に来た人のIPアドレスを取得するにはどうしたら良いのでしょうか? PHPでそういったAPIが用意してあるのでしょうか?

    • ベストアンサー
    • PHP
  • IPアドレスの取得ができない

    PCを立ち上げたところ、「IPアドレスの取得ができていない」といった表示がなされ、 ネット接続ができない状態となりました。 これまでは、このような状態になることはなかったのですが、ルータを介して複数台の PCをネット接続するようになってから、こうした不具合が生じるようになりました。 IPアドレスが取得できないPCは、以前からネット接続されていたPCで、後から追加した PCの方は全く問題ありません。 また、IPアドレスの取得ができないPCも、追加した二台目のPCよりも先に起動させると、 問題なくIPアドレスの取得ができます。 つまり、後から追加したPCを先に起動させると、一台目のPCがIPアドレスを取得できない 状態となってしまうのです。 以上の点について、何方かご回答頂ければ幸いです。 ※ルータの再起動などは試してみましたが、結果は変わりませんでした 「モデム」-「無線LANルータ」-「PC」(無線)              l            「PC」(無線)

  • IPアドレスから国名を取得

    閲覧者のIPアドレスを取得し、そこから国名を引っ張り出して、データベースに登録する。 IP取得と、登録のやり方は分かるのですが、国名はどのようにすれば取ってこれるのでしょうか? ちなみに、IPアドレスはいろいろと調べて$_server[remote_add]でとっています。どなたか宜しくお願いします。

    • ベストアンサー
    • PHP
  • VBAからIPアドレスを取得する方法を教えてください。

    現在使用しているPCは、NETやVBの開発環境を持って いないため簡単にWinsockコントロールを使用した IPアドレス取得ができません。 そのためAPIを使った昔の方法で対処したいと考えて おり調べています。どなたかおわかりになる方がいまし たら教えて頂けると助かります。 開発環境は、Excel2000 VBAです。 よろしくお願いします。

  • EXCEL VBAでユーザーが選択しているアドレス取得

    EXCELのVBAでアプリケーションを作成していますが、ユーザーが選択しているセルのアドレス取得方法がわかりません。連続、不連続ともにユーザーが選択せいているセルの数と、各セルのアドレス取得方法をご教授願います。

  • IPアドレスが取得できません

    インターネットの接続について詳しい方教えてください 私の家のWindows XPでインターネット接続ができなくなりました。 原因は分かっています au box を同じモデムにさしたところ つながらなくなりました。 以前もそのようなことがあり、モデムを再起動を したらなおっていましたが、今回はどうやっても 接続ができません IPアドレスが取得できませんとでます プロバイダやauの方に電話したのですが、 相手の方に聞いてみてください...と 両方とも良い改善策をおしえていただけませんでした。 設定をいじろうと思い、本を見てやったのですが 余計にだめでした 何処を修正すればいいのかもわからない状態です どのようにしたらIPアドレスが取得できるか おしえてください よろしくお願いします

  • VBAの質問です。

    エクセルVBAの質問です。商品と価格をCSVでデータを取り込んで別の表に商品一覧に価格の合計をSAMIFの常駐で出しているのですが商品項目が増えた場合に表に自動で追加できるようにしたいのですが、どのようなコードを書けばいいんでしょうか?是非教えていただけないでしょうか?

  • wikipediaにIPアドレスが残った?

    wikipediaを見ていて、詳細を知っていたため自分も記述しようと「編集」というのをクリックすると「あなたはログインしていません。あなたのIPアドレスはこの項目の履歴に記録されます。また、投稿の前にはプレビューが必要です。」とでました。私は何も手をつけませんでしたが、wikipediaにIPアドレスが残ったのでしょうか? また、wikipediaは編集画面で手を加える(内容を書き換える)とその時点で変更されますか?それとも、「編集」⇒「プレビュー」⇒「OK」⇒「新しい編集が適用」(つまり、プレビューでOKをしなければ、前のままであるということ)ですか。

  • ExcelのVBAに明るい方・・・

    Excelの、Sheet1 に 1日目,鈴木くん,点数,・・・ 2日目,佐藤くん,点数,・・・ 2日目,山田くん,点数,・・・ 3日目,佐藤くん,点数,・・・ 3日目,鈴木くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ という、元ダネの一覧表があって、 このデータを日々追加入力していくごとに、自動的に、 Sheet2 には、鈴木くんのみの一覧表のデータ 1日目,鈴木くん,点数,・・・ 3日目,鈴木くん,点数,・・・ ・・・ Sheet3 には、佐藤くんのみの一覧表のデータ 2日目,佐藤くん,点数,・・・ 3日目,佐藤くん,点数,・・・ ・・・ Sheet4 には、山田くんのみの一覧表のデータ 2日目,山田くん,点数,・・・ 4日目,山田くん,点数,・・・ ・・・ が、自動的に追加入力されるVBAの記述って、 どうすればいいんでしょうか? VBAに明るい方、どうかよろしくお願いします。

専門家に質問してみよう