VBAマクロからPythonを実行する(xlwings)

VBAマクロからPythonを実行する(xlwings)
スポンサーリンク
スポンサーリンク

Excel VBAを利用していると、作業内容によってはPythonを利用したい場合があると思います。
そこで、VBAからPythonを呼び出して実行する方法を解説します。

xlwings というライブラリを使用すると、Excel VBAからPythonを実行して、値の読み書きを行う事が可能になります。

これを利用することにより、マクロを実行して一部の処理をした後に、Pythonで機械学習を実行して結果をExcelに書き込み、さらにマクロで処理をさせる と言ったことも出来るようになります。

WshShellオブジェクトを使用してVBAからPythonコマンドを実行させる事もできますが、Excelの値を読み書きするには、xlwings を使用することをオススメします。

スポンサーリンク

使用ライブラリ

ライブラリ :xlwings (公式ドキュメント
インストール:必要

xlwings を利用することで、Excel VBAからPythonを呼び出せるようになります。

ただし、ライブラリのインストールだけではマクロからPythonを呼び出すことは出来ないため、VBA側で参照設定を行う必要があります。

ライブラリのインストール

コマンドプロンプトを起動してpipで xlwings ライブラリをインストールします。

pipの使い方はこちらの記事を参照してください。
・関連記事:Pythonライブラリのインストール(pipの使い方)

 python -m pip install xlwings

Successfully installed xlwings-*.*.* と表示されればインストールは成功です。

エクセルの参照設定でxlwingsを追加する

Excel側の参照設定でxlwingsライブラリを追加することで、VBAからRunPython()という関数でPythonを呼び出せるようになります。

サンプルのExcelファイルは以下のsample.xlsxを使用します。ファイルはpythonスクリプトファイルと同じディレクトリに保存します。

サンプルファイル

Excelファイルを開き、「開発」メニューからVisual Basicエディタを起動します。

Visual Basic エディタ


エディタの「ツール」から「参照設定」を開きます。

Visual Basic参照設定


xlwings にチェックを入れて「OK」をクリックします。

xlwings参照設定


プロジェクト一覧に「参照設定-xlwings.xlam」が追加され、Pythonを呼び出す事が出来るようになります。

xlwings追加

設定が完了したら、Excelファイルを sample.xlsm(マクロファイル)として保存します。

VBAからPythonを呼び出すサンプルプログラム

ExcelデータをPyhonで読み込み matplotlib でグラフを作成し、Excelにそのグラフを挿入する例を紹介します。

ディレクトリ構成は以下のようになります。

 test
  ├── sample.xlsm
  └── test.py

test.py のプログラムを以下のように記載します。



sample.xlsm には、Visual Basicエディタで標準モジュールを追加して、以下のコードを記載します。

標準モジュール追加

RunPython()の引数は、 "import pythonファイル名; Pythonファイル名.Pythonプログラム()" のように呼び出すPythonファイルとプログラムを文字列で指定します。

マクロを実行すると、Excelシートにグラフが追加されます。

デバッグ

xlwingsを実行しているPythonプログラムでエラーが発生すると、以下のようにメッセージが表示されますが、これではデバッグしずらいです。

xlwingsエラーメッセージ

上記で紹介したサンプルプログラムの場合は、Pythonのデバッグは通常と同じように、開発環境のデバッグを実行できます。

ですが呼び出し元のExcelのBookインスタンスを取得するために xw.Book.caller() を使用している場合は、Excelとの関連が何もない状態なので、デバッグを実行しても上手く機能しません。
そのため、Pythonプログラムであらかじめmockを設定した後、開発環境のデバッグモードで実行します。

サンプルプログラムです。

このように、エントリポイントとして実行された時に .set_mock_caller() で mock を設定することで、開発環境でデバッグを行うことができます。

xlwings操作一覧

xlwingsの使い方として、代表的な関数を紹介します。

ブック操作

シート操作

セル操作


・関連記事:PythonでExcelファイルを操作する(openpyxl)
・関連記事:pandasでExcelファイルの読み込み(read_excel)
・関連記事:pandasでExcelファイルの書き込み(to_excel)
・関連記事:pandasでCSVファイルを読み込む方法(read_csv)