PythonでExcelマクロを作成する
概要
Excelの作業を自動化したいけど、VBはあまり書きたくないなぁ、という場合はxlwingsを使いましょう。 アドインも用意されていて、main関数を実行する、VBマクロを経由して任意の関数をコールする、数式内で使えるカスタム関数を定義するといったことができます。 今回はExcelの入ったWindowsPCでxlwingsを使用する方法について紹介します。
condaにインストール
Windowsだと、Anacondaで環境を作ることが多いと思います。Anaconda Navigatorで簡単にインストールできます。
アドインインストール
コマンドプロンプトでインストール可能です。
xlwings addin install
しかし、バージョンの指定が出来ません。最新のバージョンを入れたい場合は Releases · xlwings/xlwings · GitHubで最新版をダウンロードして、
xlwings addin status
で出力されるPATHのファイルを置き換えて下さい。
使い方
Conda PathとConda Envを設定することで任意の環境で実行出来ます。
Run mainを押下し、現在開いているExcelと同名のpyファイルに定義したmain関数を実行
import xlwings as xw def main(): wb = xw.Book.caller() wb.sheets[0].range('A1').value = 'Foo'
VBマクロから任意のpython関数を実行
Sub SampleCall() mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1)) RunPython ("import " & mymodule & ";" & mymodule & ".hello_xlwings()") End Sub
数式で実行できるpython関数を定義
@xw.func def hello(name): return "hello {0}".format(name)
関数をインポートすると、 数式バーから呼べる状態になります。