
xlwingsでエクセルとPythonを合体④:エクセルVBAによるPython実行
前回の続きとして今回はRunPythonとしてPythonを実行する方法について紹介していきます。前回でRun mainによる実行を紹介した続きとしての位置付けになりますので、前回の内容をまだご覧になってない方はぜひ、ご確認してから今回の内容を学習してもらえるとよいかと思います。
初回で今回のマガジンが目指す方向性をご紹介しているので、まだの方は予めご確認ください。
当マガジンは
外資系のエクセル×Python術
というマガジン名でやっています。ぜひ最初から順に追っていくようにご確認ください!!!
それでは本題に入ります。今回は前回Run mainによる事項と異なり、VBAが必要になるので、今日の目次としては、
1.VBAの紹介(最低限の操作方法+xlwingsを使えるようにする方法)
2.xlwingsの機能でVBAからRunPythonを指定する方法
3.VBAにおけるPythonの書き方
4.エクセルで呼び出すボタンの設置
という流れで順に紹介をしていきます。
最初にイメージし易いようにVBAでPythonを実行する動きをお見せします。
1.VBAの紹介(最低限+xlwingsを使えるようにする方法)
前提としては前回のhello.xlsxを使っています。
まずはVBA上でxlwingsを使えるようにします。VBAの起動は以下のようにDeveloper(日本語の場合には、開発と言った名前になっています)タブのVisual Basicボタンを押します。

そうすると、開発環境の画面が立ち上がります。

ここにまずは標準モジュールというものを挿入しましょう。Insert(日本語環境では挿入)でModule(日本語ではモジュール)をクリックすると、右にModulesが追加されます。

これでここに書いていく準備が完了しました。この流れは毎回同じで、必ず実施する作業になります。頭に刷り込んでいつでも実施するようにしておきましょう!!
ここから1つ追加で実施する必要があるのですが、それはxlwingsの機能を有効にすることです。Reference(日本語では参照設定)からそれを実施します。
Tools(日本語だとツール)にあるReferenceをクリックし、少し下にスクロールするとxlwingsというものがあるので、それをクリックしてOKを押します。

するとどうでしょうか?右のようにReferencesが追加されているかと思います。これでxlwingsが使える状態となりました。

ここまで長かったでしょうか?ここからが面白い箇所なので、めげずに読み進めてください!!
2.xlwingsの機能でVBAからRunPythonを指定する方法
では、エクセルに値をPythonから連携するために、VBAからPythonを動かす方法を見ていきます。VBAでPythonを動かす際の全体像としては以下のみです。xlwingsが持っているRunPythonというコマンドを介して、Pythonのコードを実行することができます。VBAの書き方としてPublic SubとEnd Subで囲い、その関数の名前をrunpyとつけているのですが、runpy自体は自由につけられます。
Public Sub runpy()
RunPython()
End Sub
3.VBAにおけるPythonの書き方
ここからはRunPythonでどのように具体的に書いていくことで、.pyファイルの処理を実施できるかに焦点を当てて解説していきます。いきなりhello.pyにある関数を呼ぶ方法を紹介します。
その前にまずは、hello.pyファイルに以下の関数を足しておきましょう。
def hello():
wb = xw.Book.caller()
sheet = wb.sheets[0]
sheet.range("A1").value = "これはmainではない関数の実行結果です"
hello関数を定義して、これを呼び出すこととします。前回のmainの実行とは別であることを意識しているためです。ちゃんと上書き保存していることを確認しておきましょう。
RunPython ("import hello; hello.hello()")
上記が書く内容なります。最後のhelloの後に()を忘れないようにします。
フルで書くと以下です。
Public Sub runpy()
RunPython ("import hello; hello.hello()")
End Sub
ではこれで実行してみることにします。実行はF8を押してもらうと、押すたびに実行が進んでいく仕組みになっていますので、そのように実施していきます。動く様子は以下でF8を押すと黄色が下に進んでいっていることがわかるかと思います。
4.エクセルで呼び出すボタンの設置
では最後に毎回毎回F8で実行する必要がないように、エクセル側にボタンをつけるようにして、そこを押せば実行できるようにしましょう。これも動画で紹介したほうがわかりやすいので、以下を参照ください。
これで今日の内容は終了です。ぜひ今回の機能もマスターしてエクセル×Python力を上げていきましょう。