Accessの活用例として株価データを蓄積し、これらデータから株価指標を計算するクエリを作成する方法をシリーズとして紹介しています。今回は第2回目としてAccess VBAからPythonプログラムを実行する方法を紹介します。
なお、Pythonプログラムの作成までは第1回目で紹介していますので、そちらをご参考にしてください。
Pythonプログラムの実行についてのおさらい
Pythonの実行においては、第1回目の記事でも紹介したとおり、予め処理内容を記載したテキストファイルの拡張子を「py」として保存をし、これをコマンドプロンプトで実行することで処理が開始されます。
そこで、Accessから同様の処理を実行するために、コマンドプロンプトを開き、必要コマンドを送ってあげることで実行することができるようになるわけです。
以上のフローをまとめると図1のようになります。

ここで、Accessからコマンドプロンプトを実行するためにはCreateObject関数を用いることになります。
CreateObject関数について
CreateObject関数は、ActiveX オブジェクトへの参照を作成して返します。ここで、CreateObject関数の構文は、次のように書くことができ、引数の指定があります。
CreateObject(class, [ servername ])
class: 必須。Variant (String)。 作成するオブジェクトのアプリケーション名とクラス。
servername: 省略可能。Variant (String)。 オブジェクトを作成するネットワーク サーバーの名前で、servername は、空の文字列 (“”) である場合、ローカル コンピューターが使用されます。
そこで、CreateObject関数によりコマンドプロンプトのインスタンスを作成し、Pythonプログラムを実行するコードを与えることで、処理ができます。
具体的なコードを次から見ていきましょう。
VBAによる実装
VBA画面を開き、標準モジュールを作成した後に以下のコードを追加してください。
Private Sub PythonRun() '変数宣言 Dim wsh As Object Dim cmd_str As String 'VBAからコマンドプロンプトを使うためのオブジェクト定義 Set wsh = CreateObject("WScript.Shell") 'pythonを実行するためのコマンド cmd_str = "python C:\TEST\StockValue.py " 'コマンドの実行 Call wsh.Run(cmd_str, 0, False) End Sub
本コードではPythonプログラムを記載した「StockValue.py」ファイルをCドライブのTESTフォルダに保存しています。(第1回目の続きです。)
このコードを一つずつ確認していきましょう。
まずは、変数宣言をし、続いて「wsh」としてコマンドプロンプトのインスタンスを生成します。
さらに、「cmd_str」変数にPythonプログラムを実行するためのコードを文字列として格納します。
最後に、コマンドを実行するためのコードとして「wsh.Run」メソッドを記載しています。
このメソッドは以下のように基本構文を記載できます。
wsh.Run(Command, [WindowStyle], [WaitOnReturn])
Command: 実行する他アプリケーションを文字列(ダブルクォーテーションで囲った形)で指定します。
WindowStyle: 表示するウィンドウの形式を指定します。省略時の既定値は1です。「0」の場合は非表示状態で起動します。
WaitOnReturn: 起動したアプリケーションの終了を待つかどうかを指定します。Trueはアプリケーションが終了するのを待ちますが、Falseは待たずに次の処理に移行します。省略時の既定値はFalseです。
以上で実装が完了しましたので、実行をしてみてください。すると、「C:\TEST」フォルダに「YYMMDD_StockValue.csv」としてファイルが出来上がると思います。
このようにして、自動でVBAからPythonを実行処理することができるようになりました。
まとめ
今回は、Accessで株価データを管理するための下準備として、VBAにPythonプログラムを実行する方法を実装しました。本記事ではPythonプログラムの実行という観点から紹介をしましたが、コマンドプロンプトでの処理方法はあらゆる場面に活用することができ業務効率を改善することにも繋げられると思います。
コマンドプロンプトを活用する上で参考となる書籍、VBAの学習に参考となる書籍はKindleを使って取得すると便利です。是非お手元にご用意されると良いかと思います。
スポンサーリンク
次回は、AccessにCSVファイルのデータを取り込む方法を紹介します。
コメント