【VBA入門】外部ツールを実行する方法(引数つき)

VBA 外部ツールを実行する方法
  • URLをコピーしました!
※当ブログではアフィリエイト広告を表示しています

VBAでコードを書いていて、

「既にあるツールを実行させて、その結果を使いたいな」

っていうときがありますよね?
(あるんです!)

そんな時に使える、VBAで外部ツールを実行する方法を紹介します。

外部ツールの実行に引数が必要でも大丈夫。

案外簡単に外部ツールを実行することができますよ。

目次

VBAで外部ツールを実行する

今回は、C++で作ったボールの軌道を計算するツールをVBAから実行させてみます。

ボール軌道計算ツールは引数が3つ必要で、

1つ目:ボールの初速
2つ目:ボールを投げる角度
3つ目:時刻の刻み幅
です。

ツール実行する際のコマンドラインは以下のようになります。

ball.exe 10 45 0.05

これは初速10m/s、角度を45度、0.05秒間隔で計算するコマンドです。

これをVBAで実行できるようにしてみました。


ボール軌道計算ツールを実行するためのExcel画面
ボール軌道計算ツールを実行するためのExcel画面

まず、Excelのシートに引数として使う値を設定します。
今回はB2~D4セルに設定。

ボタン1をクリックすると処理が走るようにしました。

ではボタン1を押した際のコードがこちら。

Sub RunExe()
    Dim obj As Object
    Dim cmd As String
    Dim fname As String
    Dim v0 As Double
    Dim angle As Double
    Dim dt As Double
    
    '引数にする値を取得
    v0 = Cells(2, 2).Value
    angle = Cells(3, 2).Value
    dt = Cells(4, 2).Value
    
    'カレントディレクトリを変更
    ChDir ThisWorkbook.Path
    
    Set obj = CreateObject("WScript.Shell")
    
    'コマンドライン
    cmd = "ball.exe " + CStr(v0) + " " + CStr(angle) + " " + CStr(dt)
    
    '実行
    obj.Run cmd, 1, True
    
    '出力CSVの名前変更
    fname = ThisWorkbook.Path + "\out-ball.csv"
    If Dir(fname) <> "" Then
        Name fname As ThisWorkbook.Path + "\out-" + CStr(v0) + "-" + CStr(angle) + ".csv"
        MsgBox "成功しました"
    Else                        '出力ファイルが無い
        MsgBox "実行に失敗しています"
    End If
    
End Sub

このコードの中で、今回大事なのは以下の2行です。

Set obj = CreateObject("WScript.Shell")
obj.Run cmd, 1, True

CreateObjectでWScript.Shellを設定し、そのオブジェクトをRunすることで外部ツールを実行します。
※外部ツールはVBAファイルと同じフォルダにある前提で作っています。
 同じフォルダにないなら、しっかりパスも指定してください。

Runで設定しているのは、

obj.Run コマンドライン, コマンドプロンプトの表示/非表示, 同期/非同期

です。

コマンドラインは実行したいツール名やその引数を入れます。

コマンドプロンプトの表示/非表示は、

0:非表示
1:表示

で指定します。

同期/非同期は

True:同期(ツールの実行が終わるまでVBAの処理を待つ)
False:非同期(ツールの処理を待たずに続きを実行する)

を指定します。

なお、ボール軌道計算ツールは位置・速度を”out-ball.csv”というファイル名で出力します。
今回はVBAでファイル名を変換する処理も入れてみました。

Name 変更前ファイル名 As 変更後ファイル名

でファイル名を変換します。

試作プログラムの実行結果

ボール軌道計算ツールを実行するコードを、入力の角度を変えて3回実行してみました。

出力されたファイルは

しっかりファイル名が変換されています。

出力ファイルをプロットしてみると

VBA:ボールの軌道計算ツールの結果をプロット
結果をプロットしてみる

ちゃんとデータが出力できていますね。

VBAで外部ツールを実行できました!

ちなみに、VBAでグラフを作る方法は以下の記事にまとめています。

今回は外部ツールが簡単な処理を行うものでしたが、本来はもっと複雑な処理を外部ツールにさせて、VBAはその結果をプロットしたり、集計したりすることが多いです。

VBAはいろいろできて楽しいですね。

んじゃ、また~

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

関連記事

応援よろしくお願いします☆

この記事を書いた人

理系夫婦の妻のほうです。
大学、大学院(修士)で物理を専攻。
2016年に長女を出産、2021年に長男を出産。
フルタイム勤務ワーママ→休職→専業主婦。

コメント

コメントする

目次