【ExcelVBA】Excelのマクロから引数をバッチファイルに渡して呼び出すには

この記事では、Excelのマクロから引数をバッチファイルに渡して呼び出す方法についてご説明します。

【動画】Excelのマクロから引数をバッチファイルに渡して呼び出す実際の動き

本題に入る前に、まずはExcelのマクロから引数をバッチファイルに渡して呼び出す実際の動きについて、次のツイートをご覧ください。

ツイート内の動画では、Excelのマクロから引数をバッチファイルに渡して呼び出しています。

補足
ちなみに、動画内で呼び出しているバッチファイルは何をしているかというと、dirコマンドを実行しています。
VBA側から受け取った引数のディレクトリ名をもとに、そのディレクトリ内のファイル一覧をテキストファイルに書き出して生成しています。

Excelのマクロから引数をバッチファイルに渡して呼び出す方法

Excelのマクロから引数をバッチファイルに渡して呼び出すには、次の流れの通りにコードを書いていきます。

STEP.1
呼び出すバッチファイル名の取得
呼び出すバッチファイル名を取得します。
STEP.2
バッチファイルを呼び出すのに必要なインスタンスの生成
バッチファイルを呼び出すのに必要なメソッド(Runメソッド)を使用するため、そのRunメソッドが含まれるWshShellオブジェクトからインスタンスを生成します。
STEP.3
バッチファイルに引数を指定して呼び出す
「バッチファイル名」と「バッチファイルに渡したい引数」を半角スペースでつないだ文字列をRunメソッドの引数に指定し、そのRunメソッドでバッチファイルを呼び出します。
Runメソッドとは?
Runメソッドは、外部プログラムを実行するメソッドです。

Excelのマクロのコードの例

    'WshShellオブジェクト
    Dim obj As WshShell
    
    'バッチファイル
    Const batPathFileName As String = "C:\work\exec.bat"
    
    'WshShellオブジェクトからインスタンスを生成する
    Set obj = New WshShell
    
    '選択されたバッチファイルをパラメタに指定して、バッチファイルを呼び出す
    Call obj.Run(batPathFileName & " " & "C:\work", 0, WaitOnReturn:=True)

コードの解説

まずは11行目を見てください。

11行目でRunメソッドでバッチファイルを呼び出しています。

Runメソッドには、「バッチファイル名」と「バッチファイル実行に必要な引数」を半角スペースでつないた文字列を、第1引数に指定しています。

この「バッチファイル実行に必要な引数」をバッチファイルが受け取り、バッチファイルの処理に使われます。

ちなみに、第2引数にはバッチファイル実行時のコマンドプロンプトのウィンドウの表示方法を指定(0は非表示にする設定値)、第3引数には「同期/非同期」の設定値(Trueは同期)を指定しています。

「同期/非同期」とは?
「同期/非同期」とは、呼び出したプログラムの終了をExcelのマクロ側が待つかどうかのことを指します。
同期(True):呼び出したプログラムの終了をExcelのマクロ側が待つ
非同期(False):呼び出したプログラムの終了をExcelのマクロ側が待たない

なお、RunメソッドはWshShellオブジェクトからインスタンスを生成しておかないと実行できないので、必ずインスタンスを生成しておきます。(8行目を参照)

バッチファイルのコードも見てみましょう

先ほどExcelのマクロのコードをご説明しましたが、渡された引数をバッチファイルがどう受け取っているのか、バッチファイルのサンプルコードでご説明します。

バッチファイルのコードの例

@echo off

rem データファイルの格納先とファイル名
set opFilePath=C:\work\output\outputFile.txt

cd %1

rem データファイルの有無チェック
if not exist %opFilePath%\%opFile% (
	rem  データファイルを作成する
	dir /b /s > %opFilePath%\%opFile%
)
このサンプルのバッチファイルは何をしている?
このサンプルのバッチファイルは、dirコマンドを実行し、ファイルの一覧をテキストファイルに書き出して生成する処理を行っています。

コードの解説

このコードでまず見て頂きたいのは6行目です。

6行目の%1に、Excelのマクロから渡された引数の値が入っています。

ちなみに、%1は引数取得用の変数を指します。

先ほどのExcelのマクロから本バッチファイルが呼び出された場合、Excelのマクロから渡された「C:\work」の文字列が%1に入っています。

cdコマンドにExcelのマクロから渡された引数であるディレクトリ名(C:\work)を指定し、そのディレクトリに移動しています。

バッチファイルに渡される引数について
%1は第1引数。
もし渡された引数の数が2つなら、2つ目の引数は%2
もし渡された引数の数が3つなら、3つ目の引数は%3
もし渡された引数の数が4つなら、4つ目の引数は%4
・・・
といった感じで、渡された引数を受け取ることができます。

最後に

本記事では、Excelのマクロから引数をバッチファイルに渡して呼び出す方法についてご説明しました。

その方法は、バッチファイルを呼び出すRunメソッドの引数に、「バッチファイル名」と「バッチファイルに渡したい引数」を半角スペースでつないだ文字列を指定することです。

このRunメソッドが実行されてバッチファイルが呼び出される際に、「バッチファイルに渡したい引数」がバッチファイルに渡されます。

バッチファイルがこの「バッチファイルに渡したい引数」を受け取り、バッチファイルの処理に使われます。

もし今後本記事の内容と似たようなようなことをやろうとしてる場合、参考にしていただけたら幸いです。

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

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

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

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