HOME > 即効テクニック集 > Excel VBA > その他関連のテクニック > コマンドプロンプトの標準出力を取得する
その他関連のテクニック

コマンドプロンプトの標準出力を取得する

(Excel 97/2000/2002/2003/2007)
Windowsには、コマンドプロンプトという機能があります。
コマンドプロンプトは、MS-DOSなどのコマンドを実行するための機能で、ネットワークを管理する状況などでも、よく使われます。

コマンドプロンプトで実行できるコマンドには、Windowsにはない便利なものも少なくありません。
たとえばTreeコマンドは、サブフォルダの状況を次のようなツリー構造のテキストで返してくれます。



このコマンドプロンプトをVBAから利用するには、2つの問題があります。
1つは、Shell関数ではコマンドプロンプトを起動できないということです。
また、一般的なMS-DOSコマンドは、実行した結果もコマンドプロンプトの画面に表示されます。
この結果をVBAでは取得できないというのが2つめの問題です。

VBAだけでは解決できませんが、WSH(Windows Scripting Host)を使うことで2つの問題を解決できます。
WSHのWshScriptExecオブジェクトが持つExecメソッドは、command.comやcmd.exeなどのコマンドシェルを実行できます。
さらに実行結果の標準出力を取得することも可能です。
さっそくやってみましょう。次のコードはC:\のファイル一覧を表示します。

Sub Sample1()
  Dim WSH As Object, wExec As Object, Cmd As String, Result As String
  Set WSH = CreateObject("Wscript.Shell")
  Cmd = "dir C:\"
  Set wExec = WSH.Exec("%ComSpec% /c " & Cmd)
  Do While wExec.Status = 0
    DoEvents
  Loop
  Result = wExec.StdOut.ReadAll
  MsgBox Result
  Set wExec = Nothing
  Set WSH = Nothing
End Sub   
マクロを実行すると、一瞬コマンドプロンプトが起動しますが「/c」スイッチを指定しますので、コマンド終了後にコマンドプロンプトも閉じます。 上記で紹介したTreeコマンドでしたら、「Cmd = "dir C:\"」の部分を、たとえば「Cmd = "tree /f C:\Sample"」のように書き換えます。 コマンドプロンプトには、便利な命令がたくさん用意されています。
Cmd = "fc data1.txt data2.txt"
とすれば、data1.txtとdata2.txtの相違が表示されます。 また
Cmd = "copy data1.txt+data2.txt total.txt"
とすれば、data1.txtとdata2.txtを合体させたtotal.txtを作成できます。 使いこなすには、それなりに知識や経験が必要ですが、興味のある方は、ぜひチャレンジしてください。