目次
はじめに
VBAマクロから、ファイルの一覧をテキストに出力する dir
コマンドや、ネットワーク設定を確認する ipconfig
コマンドといった、古くからある**コマンドプロンプト(DOSコマンド)**を実行したい場面があります。
VBAから WScript.Shell
オブジェクトを利用することで、これらのコマンドラインツールを呼び出し、その機能を活用することが可能です。この記事では、VBAからコマンドプロンプトのコマンドを実行するための、基本的で確実な方法を解説します。
コマンドプロンプトのコマンドを実行するVBAサンプルコード
このマクロは、ipconfig
コマンドを実行し、その結果をデスクトップ上の ip_config.txt
という名前のテキストファイルに出力します。
完成コード
' コマンドプロンプトのコマンドを実行し、結果をファイルに出力する
Sub RunDosCommand()
Dim shellObj As Object
Dim commandText As String
Dim outputPath As String
'--- 1. WScript.Shellオブジェクトを作成 ---
Set shellObj = CreateObject("WScript.Shell")
'--- 2. 出力先のパスと、実行したいコマンドを準備 ---
' SpecialFolders("Desktop")で、デスクトップのパスを動的に取得
outputPath = shellObj.SpecialFolders("Desktop") & "\ip_config.txt"
' ipconfigの結果をリダイレクト(>)でテキストファイルに出力するコマンド
commandText = "ipconfig > " & outputPath
'--- 3. コマンドを実行 ---
' 第2引数 0 で、コマンドプロンプトのウィンドウを非表示にする
' 第3引数 True で、コマンドの完了を待つ
shellObj.Run "%ComSpec% /c " & commandText, 0, True
'--- 4. 後片付けと通知 ---
Set shellObj = Nothing
MsgBox "コマンドを実行し、結果をデスクトップに出力しました。"
End Sub
実行結果
マクロを実行すると、デスクトップに ip_config.txt
ファイルが作成され、中に ipconfig
の実行結果が書き込まれます。
コードの解説
Set shellObj = CreateObject("WScript.Shell")
Windowsのシェル機能(プログラムの実行など)をVBAから操作するための WScript.Shell
オブジェクトを生成しています。
shellObj.Run "%ComSpec% /c " & commandText, 0, True
この一行が、コマンドを実行する核心部分です。
.Run
: プログラムやコマンドを実行するメソッドです。"%ComSpec% /c "
: これはおまじないとして覚えておくと便利です。%ComSpec%
: コマンドプロンプトの実行ファイル(cmd.exe
)の場所を示す環境変数です。/c
: 後ろに続くコマンドを実行した後に、コマンドプロンプトのウィンドウを閉じるためのスイッチです。
commandText
: 実際に実行したいコマンドラインの文字列("ipconfig > C:\...
)を渡します。- 第2引数 (
0
): ウィンドウの表示スタイルです。0
を指定すると、コマンドプロンプトの黒い画面が非表示のまま実行されます。 - 第3引数 (
True
): コマンドの実行が完了するまで、VBAの処理を待機させるかどうかを指定します。True
にすると、ファイルへの書き込みが終わるまで待ってから、次のMsgBox
の行に進みます。
まとめ
今回は、WScript.Shell
オブジェクトを使って、VBAからコマンドプロンプトのコマンドを実行する方法を解説しました。
WScript.Shell
オブジェクトの.Run
メソッドを使う。- コマンドの前に
"%ComSpec% /c "
を付けるのが定石。 .Run
の第2、第3引数を指定することで、ウィンドウを非表示にしたり、処理の完了を待ったりできる。
この方法を使えば、VBAだけでは実装が難しい、あるいは面倒な処理(ファイルシステムの高度な操作、ネットワークコマンドの実行など)を、既存のコマンドラインツールを呼び出すことで、手軽に実現できます。