yoraba build

備忘録を兼ねた技術ブログ

PythonでExcelマクロを作成する

概要

 Excelの作業を自動化したいけど、VBはあまり書きたくないなぁ、という場合はxlwingsを使いましょう。 アドインも用意されていて、main関数を実行する、VBマクロを経由して任意の関数をコールする、数式内で使えるカスタム関数を定義するといったことができます。 今回はExcelの入ったWindowsPCでxlwingsを使用する方法について紹介します。

condaにインストール

 Windowsだと、Anacondaで環境を作ることが多いと思います。Anaconda Navigatorで簡単にインストールできます。 f:id:yoraba:20200628151558p:plain

アドインインストール

 コマンドプロンプトでインストール可能です。

xlwings addin install

 しかし、バージョンの指定が出来ません。最新のバージョンを入れたい場合は Releases · xlwings/xlwings · GitHubで最新版をダウンロードして、

xlwings addin status

で出力されるPATHのファイルを置き換えて下さい。

使い方

f:id:yoraba:20200628152824p:plain

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)

f:id:yoraba:20200628154301p:plain 関数をインポートすると、 f:id:yoraba:20200628154445p:plain 数式バーから呼べる状態になります。