• ベストアンサー

VBでDOSコマンドを実行し、結果をEXCELシートに貼りたい

EXCELからVB等を使ってDOSコマンドを実行し、その実行結果を指定したEXCELシートに貼り付けることは出来ますでしょうか?例えば、EXCELシート内に配置したボタンを押すと、DOSコマンド「ipconfig」等が起動され、その出力結果を指定したEXCELシートに貼り付けるという動作をさせたいと考えています。よろしくお願いいたします。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

とりあえず、1つのDOSコマンドの出力をEXCELシートに貼り付けるようにしてある。 VBAから.batファイルを実行して、DOSコマンドの出力を.txtファイルに落とし、それをEXCELで読込んでコピー/ペーストするというもの。 原始的です。 ipconfigの例 .batファイル d: ipconfig /all >ipconfig.txt ipconfigを実行し、その結果をipconfig.txtに出力。 これを、ipconfig.bat として保存。 Dドライブのルートに置いた。 EXCELへの取り込み EXCELのファイルをdestin.xlsにしてある。 Private Sub CommandButton1_Click() RetVal = Shell("D:\ipconfig.bat", 1) Workbooks.OpenText Filename:="D:\ipconfig.txt", DataType:=xlDelimited, Tab:=True ActiveWindow.Visible = False r1 = 20 '取り込む.txtの最大行 c1 = 5 '取り込む.txtの最大列 r2 = 1 '貼り付けられる.xlsの場所 行 c2 = 1 '貼り付けられる.xlsの場所 列 With Workbooks("ipconfig.txt").Sheets(1) .Range(.Cells(1, 1), .Cells(r1, c1)).Copy End With With Workbooks("destin.xls").Sheets(1) .Paste Destination:=.Cells(r2, c2) End With Application.DisplayAlerts = False Workbooks("ipconfig.txt").Close Application.DisplayAlerts = True End Sub

keokada
質問者

お礼

okormazd様 .batファイルを実行してその結果を取り込む手法、大変参考になりました。この方法も取り入れてみたいと思います。最終的には、perlのスクリプト(ActivePerlなど)にユーザが指定したファイルを食わせて、その標準出力結果をExcelシートに貼り付けたいと考えています。 ユーザ指定のファイルをDOSコマンドの引数として渡すことって、VBAから行わせることって出来ますでしょうか?

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

>ユーザ指定のファイルをDOSコマンドの引数として渡すことって、VBAから行わせることって出来ますでしょうか? コマンドプロンプトで可能なら、それをそのまま.batに書いておいてvbaから実行させるだけですが。 例 find /c /n /i "default" d:\ipconfig.txt > d:\find.txt で、 ipconfig.txtから"default"を探して結果をfind.txtに出力します。 .batを作らせて実行ということですか。それも可能でしょうから考えて見られたら・・・。。

keokada
質問者

お礼

okormazd様 ご回答ありがとうございました。(お礼遅くなりました。) アドバイスのやり方含め、色々と試してみたいと思います。 今後とも宜しくお願い致します。

noname#67980
noname#67980
回答No.2

まず、VB6からDOSコマンドを実行し、コマンドの実行終了まで待つには Private Declare Function OpenProcess Lib "kernel32" _   (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _    ByVal dwProcessId As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _   (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _   (ByVal hObject As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400& Private Const STILL_ACTIVE = &H103& Private Sub ShellEnd(ProcessID As Long)   Dim hProcess As Long   Dim EndCode As Long   Dim EndRet  As Long   'ハンドルを取得する    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID)   '終わるまで待つ   Do     EndRet = GetExitCodeProcess(hProcess, EndCode)     DoEvents   Loop While (EndCode = STILL_ACTIVE)   'ハンドルを閉じる    EndRet = CloseHandle(hProcess) End Sub Sub Main() '実行 Ret = Shell(App.Path & "\" & "TEST.bat") Call ShellEnd(Ret) '結果を書き込む '省略 End if TEST.batの中身は @ifconfig > C:\aaa.txt 等のように、コマンド発行の結果をテキストファイルに書き込めば・・・。 あとは、C:\aaa.txtのテキストファイルを読込んで表示するだけです。 質問の範囲が広かったので、ざっくりと流れだけでも・・・。

keokada
質問者

お礼

hinaguma様 「コマンドの実行終了まで...」のところが、ハイレベルな内容で、理解がまだ進んでおりませが、後半部分は大変参考にさせて頂きました。ありがとうございました。

  • teto_pun2
  • ベストアンサー率41% (12/29)
回答No.1

下記、URLを参考にしてはどうでしょうか? http://officetanaka.net/excel/vba/tips/tips27.htm http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/may06/hey0519.mspx VBでなくVBScriptにて出来そうですが、お試しください

keokada
質問者

お礼

teto_pun2様 大変参考になるページを教えて頂き、ありがとうございます。 このページを参考にし、いろいろ試してみたいと思います。

関連するQ&A