【Python】xlwingsでExcelマクロを実行する

PythonでExcel操作~~といったところは近年よく話題になり、Excel業務をPythonで自動化・効率化というトレンドがあったりなかったりします。そのようなトレンドになるほどPythonにはExcel操作のライブラリが多数存在し、PythonとExcelの親和性が高いのも事実です。

PythonのExcel操作系ライブラリのほとんどでは、マクロを実行するメソッドが用意されています。今回はxlwingsというライブラリを使ってExcelマクロを実行する手順を紹介します。

Excelマクロ

Pythonで呼び出すExcelマクロを確認しておきます。今回は簡単なマクロを用意しました。Sample.xlsmに1~12月までの合計を算出するマクロを作成しました。

PythonからAggregate()を呼び出します。

Sample.xlsm
Sample.xlsm
Aggregate()
Aggregate()
Sub Aggregate()
    Dim 合計 As Integer
    
    For i = 1 To 12
        合計 = 合計 + Cells(2, i).Value
    
    Next
    
    Cells(2, 13) = 合計
    
End Sub

xlwingsのインストール

xlwingsをインストールしていない方はまずインストールしましょう。pip、condaの両方からインストール可能です。

pip install xlwings

conda install xlwings

PythonからExcelマクロを実行する

Pythonから先ほどのマクロを実行します。まずはソースコード全体を紹介します。

import xlwings as xw

excel = xw.App(visible=False)
wb = excel.books.open('C:/Project/マクロ/Sample.xlsm')
macro= wb.macro('Aggregate')
macro()

wb.save()
wb.close()
excel.quit()

まずはxlwingsをxwとしてインポートします。

xw.App()でExcelインスタンスを作成します。visible=Falseとすることで、実行時にバックグラウンドでExcelが開かれるため、画面上では処理が見えなくなります。

excel.books.open()で引数に指定したExcelファイルを開きます。

wb.macro()では実行するマクロを指定しています。

macro()でマクロを実行します。これを忘れるとマクロを実行できないので注意です。もし実行するマクロに引数を指定する必要がある場合は、ここで引数を渡します。

以降はExcelファイルを保存してブックを閉じているだけです。開いたファイル、作成したインスタンスの後始末は忘れずにしておきましょう。

さて、このプログラムを実行した後のExcelファイルを見てみます。M列の合計に値が入りました。

プログラムを実行した後のExcelファイル
マクロ実行後

まとめ

PythonからExcelマクロを実行する方法を紹介しました。Excel業務をPythonで自動化というのはトレンドではありますが、Pythonプログラムを作成しなければならない点がネックになります。

既にマクロを作成しているのであれば、Python化への第一歩としてPythonからマクロ呼び出しという方法もあると思います。もちろんマクロを呼び出すだけではPython化の意味がないので、他の処理との連携が前提ですけどね。

少しずつPythonでのExcel操作を身につけていきましょう^^

ではでは👋