【ExcelVBA】Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行するには

この記事では、Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行する方法についてご説明します。

【動画】Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行する実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

Excelのマクロからコマンドプロンプトを呼び出してdirコマンドを実行しています。

dirコマンド実行後、正常にテキストファイルが生成されています。

Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行する方法

Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行するには、次の流れの通りにコードを書いていきます。

Excelのマクロの作成の流れ

STEP.1
コマンドプロンプトを呼び出すのに必要なインスタンスの生成
コマンドプロンプトを呼び出すのに必要なインスタンスを生成します。
STEP.2
コマンドプロンプトを呼び出して指定したコマンドを実行
コマンドプロンプトを呼び出し、指定したコマンドを実行します。

コードの例

Excelのマクロのコード(例)

Sub test()

    Dim wshObj As WshShell                 'WshShellオブジェクト
    
    'WshShellオブジェクトからインスタンスを生成する
    Set wshObj = New WshShell
    
    'コマンドプロンプトを呼び出し、指定したコマンドを実行する
    Call wshObj.Run("%ComSpec% /c " & "dir C:\work > C:\work\data.txt", 1, WaitOnReturn:=True)
    
    '後処理
    
    Set wshObj = Nothing
    
End Sub

コードの解説

注目すべきコード①

最初に見て頂きたいのは9行目です。

    'コマンドプロンプトを呼び出し、指定したコマンドを実行する
    Call wshObj.Run("%ComSpec% /c " & "dir C:\work > C:\work\data.txt", 1, WaitOnReturn:=True)

9行目でコマンド文(コマンドプロンプトでdirコマンドを実行するためのコマンド文)をRunメソッドの第1引数に設定してコマンドプロンプトでdirコマンドを実行しています。

なお、Runメソッドの第1引数の「%ComSpec%」はWindowsの環境変数で、この環境変数にはコマンドプロンプトの実行ファイル(本体)である「cmd.exe」のフルパスが格納されています。

dirコマンドを実行するため(dosコマンドの実行)に必要なコマンドプロンプトを呼び出すため、Excelのvbaからこのcmdを実行します。

ちなみに、環境変数の設定を見るとコマンドプロンプトの実行ファイルが設定されていることが確認できます。

もしこの環境変数が設定されていない場合は、環境変数(コマンドプロンプトの実行ファイル(本体)である「cmd.exe」のフルパス用の環境変数)を追加するか、コマンドプロンプトの実行ファイル(本体)である「cmd.exe」のフルパスを指定します。

①コマンドプロンプトの実行ファイル(本体)である「cmd.exe」のフルパス用の環境変数

 


②コマンドプロンプトの実行ファイル(本体)である「cmd.exe」のフルパスを指定したソース
    Call wshObj.Run("C:\Windows\System32\cmd.exe /c " & "dir C:\work > C:\work\data.txt", 1, WaitOnReturn:=True)
注目すべきコード②

次に見て頂きたいのは6行目です。

6行目でコマンドプロンプトを呼び出すのに必要なインスタンスの生成しています。

    'WshShellオブジェクトからインスタンスを生成する
    Set wshObj = New WshShell

このインスタンスがないとコマンドプロンプトを呼び出すことができません。

【補足】環境変数設定画面の開き方

環境変数設定画面を開く手順は次の通りです。

※手順は何通りかありますが、その中の一例をご説明します。
※手順はWindows10のものです。

①Windowsのスタートメニューから「設定」をクリックする

Windowsのスタートメニューから「設定」をクリックします。

②「詳細情報」をクリックし、「システムの詳細設定」をクリックする

「詳細情報」をクリックし、「システムの詳細設定」をクリックします。

※「システムの詳細設定」の表示場所は画面の下の方にあるので、下にスクロールさせて見つけてください。

③「システムのプロパティ」画面で「環境変数」のボタンをクリックする

「システムのプロパティ」画面で「環境変数」のボタンをクリックします。

④「環境変数」画面が開く

「環境変数」画面が開きます。

手順は以上になります。

※手順「①Windowsのスタートメニューから「設定」をクリックする」で下の画面がもし表示されたら、「システム」をクリックすると、手順②に進むことができます。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。

  1. Windows Script Host Object Model(wshom.ocx)

なぜ必要かというと、先ほどのコードの6行目の「WshShell」というオブジェクトが「wshom.ocx」というファイルを参照するからです。

    'WshShellオブジェクトからインスタンスを生成する
    Set wshObj = New WshShell

この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。

ここでは「wshom.ocx」が何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「WshShell」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。

最後に

本記事では、Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行する方法についてご説明しました。

コマンドプロンプトを呼び出すときはWshShellオブジェクトを利用すれば簡単です。

Excelのマクロからコマンドプロンプトを呼び出してコマンドを実行したい場合は参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら