PythonでExcel VBAマクロを実行する目的
日常や仕事の中でExcelでデータを集計する場面は多いと思います。また、Excelについているマクロを用いて集計したデータを加工したりといったことも多いのではないでしょうか。単発の作業であれば毎回マクロをその都度実行すればいいですが、繰り返しの作業となってくると時間も手間もかかるものです。
今回は、Pythonを使って指定のExcel内のマクロを実行するコードを最低限の行を使って紹介したいと思います。
例えばこんな方にお薦め
- 最近Pythonを使い始めて、どんなことができるか試してみたい
- VBAで自働化されたエクセルワークブックは持っているが、いちいちワークブックを開いて実行するのが手間と感じている
- エクセルワークブックのVBAでのデータ処理を行い、その結果をPython-pptxなどで資料化するまでをPythonで一度に実行したい
- PythonやVBAを使えない人とデータを共有している
前準備として、win32ライブラリのインストールを済ませておきます。
使用するソースコード
以下の公開リポジトリに置いています。
https://github.com/sunset-create/Excel_run
コードの解説
解説には下記のコードを使います。
import win32com.client import os cd = os.getcwd() excel = win32com.client.Dispatch("Excel.Application") wb = excel.Workbooks.Open(cd + '/test.xlsm') excel.visible = True excel.Application.Run("Module1.test")
上記のコードを記述した.pyファイルと動作させたいマクロを持ったExcelファイルを同じフォルダに置きます。ここでは、test.xlsm を使用します。test.xlsmには"Hello World!"と表示されるマクロ"test"が記述してあります。
マクロ"Module1.test"を実行します。
プログラムを実行すると、test.xlsmが開き"Hello World!"と表示されます。
コードの解説をしていきます。
import win32com.client
win32comモジュールをインポートします。Excelを操作するのに使用します。
import os
osモジュールをインポートします。現在のディレクトリを取得するのに使用します。
cd = os.getcwd()
cd変数に現在のディレクトリを格納します。
excel = win32com.client.Dispatch("Excel.Application")
win32comモジュールでExcelを起動します。
wb = excel.Workbooks.Open(cd + '/test.xlsm')
Excelワークブックを開きます。ここでは、test.xlsm を開いています。
excel.visible = True
マクロが動作していることを確認するためにExcelを可視化します。不要な場合は、TrueをFalseに変えればバックグラウンドで作業してくれるようになります。
excel.Application.Run("Module1.test")
今回は、Pythonを使ってExcelのマクロを動かしてみました。マクロを使った繰り返し作業を自動化するなどに使えると思います。