• 締切済み

エクセルでDOSコマンドを実行

お世話になります。 例えばエクセル(office2003)のA列にDOSコマンドの入力内容(copy A.csv c:\copyA.csv)を記述しているものがあるとして、エクセル上でA列のコマンドを実行し、エクセル上(例えばb列)にその結果を表示させることって可能でしょうか。 どなたかご教授頂けると幸いです。 宜しくお願い致します。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

とりあえずこんな感じのVBAを作ってみました。 Declare Sub Sleep Lib "KERNEL32" (ByVal ミリ秒 As Long) Sub DOS実行(ByVal 行 As Long) Dim シェル Dim 実行 Dim 命令 As String Set シェル = CreateObject("WScript.Shell") 命令 = "CMD.exe /C " & Cells(行, 1) Set 実行 = シェル.Exec(命令) Do Until 実行.Status = 1     Sleep 100 '★100ミリ秒間のスリープ Loop Cells(行, 2) = 実行.ExitCode Cells(行, 3) = 出力取得(実行.StdOut) Cells(行, 4) = 出力取得(実行.StdErr) End Sub Function 出力取得(出力) As String Dim 結果 As String Do Until 出力.AtEndOfStream     If 結果 <> "" Then 結果 = 結果 & vbNewLine     結果 = 結果 & 出力.ReadLine Loop 出力取得 = 結果 End Function 使用方法と解説 1行目のコマンドを実行するには「DOS実行 1」と呼び出します。 「DOS実行」は指定された行のA列にある文字列を取り出して、 コマンドプロンプトのコマンドとして実行させます。 処理が終了するまで待ちます。(100ミリ秒に1回ずつ調べる) 終了後、プログラムの終了コードをB列、標準出力の内容をC列、 標準エラーの内容をD列に表示します。 Sleepを入れないと、Excel自身がCPUのタイムスライスを消費 して、コマンドや、他のプログラムの実行に悪影響を及ぼします。

関連するQ&A

  • DOSにコマンドを送って実行

    DOSモードでしか実行できないソフトがあるんですが、 VBからそのソフトをDOSで実行し、コマンドを送って、結果を得られるようにしたいのですが。 それと、DOSで実行している過程は表示されないようにしたいです。 そのソフトの使用方法は起動してコマンドを入力するだけで結果が出てきます。 どなたかご存知の方がいらっしゃいましたら宜しくお願い致します。

  • DOSコマンドについて

    DOSコマンドで下記の2つを実現したくて色々と 調べてみたのですがわかりませんでした。 (1)バッチファイルを実行したら、DOSプロンプトの  画面が立ち上がり、検索したい文字を入力できる  状態にする。 (2) (1)で入力された文字列が2文字以上だった場合は  エラーメッセージを表示し、再度入力させる。 (3)(1)で入力した文字列を任意のファイル内で検索し、  あれば大文字⇒小文字に変換する。 echoとpromptというコマンドを使って入力画面を 表示させることができるのかと思いましたが なかなかうまくいかない状態でした。 何か参考になるサイトがあれば教えて頂ければ幸いです。

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

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

  • DOSコマンド(COPYコマンド)について

    DOS上でのCOPYコマンドについて確認します。 EXCELのファイルで、毎回ファイル名が変わるため、COPYコマンドで固定のファイル名にしようと思い、バッチ起動で、COPY \AAA\*.XLS \AAA\BBB.XLSで実行すると、コピー元と違うファイルサイズのBBB.XLSが作成されます。 中身を参照すると、文字化けしたものが 1レコードだけ作成されています。どうしてなのでしょうか? ※コピー元の*.XLSは、毎回 1ファイルのみです。

  • DOSコマンド

    dosコマンドを入力して、Enterを押したとき、数分後に実行される命令はないですか?

  • エクセルのVBAからDOSコマンドのDIRを実行したい

    DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • 【DOSコマンド】バックグラウンドでの実行

    お世話になります。 Windows環境にて、DOSのコマンドから、とあるプログラムを起動したいと考えております。 例えば、『c:\hidemaru.exe (改行) exit;』 という感じで。しかし、このままではプログラムを実行中はDOS画面が起動したままになってしまいます。 そこでプログラムは起動し、DOS画面は閉じる、といった書き方をご存知の方はいらっしゃいますでしょうか? よろしくお願いいたします。

  • ShellExecuteでDOSコマンド実行したら...

    VC++6.0においてShellExecuteでDOS窓をたち上げてコマンドを 実行したいのですが、うまくいきません。 1.ShellExecute(m_hWnd,"open","command.com","dir",NULL,SW_SHOW); ...とすると”指定された COMMAND 検索ディレクトリが違います.”となり、 なにも実行されません。 2.ShellExecute(m_hWnd,"open","command.com","dir /?",NULL,SW_SHOW); ...とするとちゃんとdirのヘルプが表示されますが、すぐに窓が閉じます。 3.ShellExecute(m_hWnd,"open","command.com","dir /? > out.txt",NULL,SW_SHOW); ...としてもファイルが作られず、2.と全く同じ結果になってしまいます。 これはどうしてこのような現象が起きるのでしょうか? DOSプロンプトをたち上げて同様なコマンドを実行した場合はちゃんと期待通りの結果が得られます。 あと、DOS窓が閉じないようにするにはどうすればいいのでしょうか?

  • VBでDosコマンドを動かすには

    VB6でDosのコマンドを入力して実行させたいと思っているのですが、どのように設定すればいいのでしょうか? わざわざVB6からDosプロンプトを起動させるわけではございません。 理想ではテキストボックスにコマンドを入力してボタンを押すと実行すると言う形にしたいのですが・・・。 ご存知の方ご指導よろしくお願いします たぶんAPIを使うのだと思いますがAPIまだまだ知識不足なので、分かりやすく解説していただければ助かります。 よろしくお願いします。

  • DOSコマンドのFD FORMATの実行方法

    DOSコマンドでFORMAT(FDに対して)を行いますが、途中での入力をなくしたいです。 「FORMAT A:」としておくと「準備が出来たらEnter」という問い合わせや「ボリューム名」「続けますか?」を問い合わせてきます。 これをまったく無しにしたく、BATを実行させれば、FORMATされて終了する、にしたいです。 どのような引数を書けばいいのでしょうか?