- ベストアンサー
VBでDOSコマンドを実行し、結果をEXCELシートに貼りたい
EXCELからVB等を使ってDOSコマンドを実行し、その実行結果を指定したEXCELシートに貼り付けることは出来ますでしょうか?例えば、EXCELシート内に配置したボタンを押すと、DOSコマンド「ipconfig」等が起動され、その出力結果を指定したEXCELシートに貼り付けるという動作をさせたいと考えています。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、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
その他の回答 (3)
- okormazd
- ベストアンサー率50% (1224/2412)
>ユーザ指定のファイルをDOSコマンドの引数として渡すことって、VBAから行わせることって出来ますでしょうか? コマンドプロンプトで可能なら、それをそのまま.batに書いておいてvbaから実行させるだけですが。 例 find /c /n /i "default" d:\ipconfig.txt > d:\find.txt で、 ipconfig.txtから"default"を探して結果をfind.txtに出力します。 .batを作らせて実行ということですか。それも可能でしょうから考えて見られたら・・・。。
お礼
okormazd様 ご回答ありがとうございました。(お礼遅くなりました。) アドバイスのやり方含め、色々と試してみたいと思います。 今後とも宜しくお願い致します。
まず、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のテキストファイルを読込んで表示するだけです。 質問の範囲が広かったので、ざっくりと流れだけでも・・・。
お礼
hinaguma様 「コマンドの実行終了まで...」のところが、ハイレベルな内容で、理解がまだ進んでおりませが、後半部分は大変参考にさせて頂きました。ありがとうございました。
- teto_pun2
- ベストアンサー率41% (12/29)
下記、URLを参考にしてはどうでしょうか? http://officetanaka.net/excel/vba/tips/tips27.htm http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/may06/hey0519.mspx VBでなくVBScriptにて出来そうですが、お試しください
お礼
teto_pun2様 大変参考になるページを教えて頂き、ありがとうございます。 このページを参考にし、いろいろ試してみたいと思います。
お礼
okormazd様 .batファイルを実行してその結果を取り込む手法、大変参考になりました。この方法も取り入れてみたいと思います。最終的には、perlのスクリプト(ActivePerlなど)にユーザが指定したファイルを食わせて、その標準出力結果をExcelシートに貼り付けたいと考えています。 ユーザ指定のファイルをDOSコマンドの引数として渡すことって、VBAから行わせることって出来ますでしょうか?