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

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

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を押した際のコードがこちら。

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

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はいろいろできて楽しいですね。

んじゃ、また~

関連記事

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

この記事を書いた人

理系夫婦の妻のほうです。
大学、大学院(修士)で物理を専攻。
2016年に長女を出産。
フルタイム勤務ワーママ→休職中。
「CrowdWorks(クラウドワークス)」でお仕事受け付けております!
(ツール開発、記事執筆など)
「まゆみ1101」というユーザー名です!

コメント

コメントする

目次
閉じる