Python ExcelVBAマクロファイルを実行する「pywin32(win32com)」
本記事では、Excelマクロファイル(.xlsm)をPython(.py)で操作する雛形コードを載せました。
まずは、WindowsアプリをPythonで操作するライブラリpywin32(win32com)をpipでインストールします。
anaconda環境下では次のようにしてインストールします。
VBAとはVisual Basic for Applicationsの略でMicrosoft Office製品を動かすプログラミング言語のことです。特にエクセルを動かすVBAをExcel VBAと呼びます。
ここで、本記事で使用するExcel VBAのプログラムを下図に示す。引数valを受け取ってExcelのセルに代入し、セルに数式を代入して掛け算をする仕組みにしています。本雛形コードでは、引数をPythonから与える仕様にしています。

ここで注意です。作成したプロシージャは、引数を設定したプロシージャや、プライベートプロシージャ(Private sub や function)の場合は、下図のようにマクロ名に表示されません。

そのため、そうした場合にプログラムを再編集したい場合は、下図のように「開発」タブのVisual Basicをクリックすることで出来ます。

本プログラム(.py:コードは本記事の文末に記載)は、下図のようにExcel VBAで作成したマクロファイル(.xlsm)と同じフォルダへ置きます。

本コードを実行すると、下図のようにいくつかの.xlsxファイルを生成します。

下図は「3.xlsx」の場合の例です。B列のセルにファイル名と同じ「3」が代入されてるのは、Pythonから代入された値のためです。そして、C列はA列×B列の掛け算の結果です。図中では”C9”を選択していて、図中上側のfxをみると「=A9*B9」と数式になってることがわかります。これは、Excel VBAでセルに数式を代入した結果のためです。

■本プログラム
ファイルの保存書式は、FileFormatで指定します。.xlsxは「51」で.csvは「6」です。
(備考)次のようなエラーが出た場合は、ファイルの指定が絶対パスになっていないためです。ファイルの読み出しだけでなく、保存の場合にも絶対パスの必要があります。
com_error: (-2147352567, '例外が発生しました。', (0, 'Microsoft Excel', '申し訳ございません。excel_vba_macro.xlsmが見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。', 'xlmain11.chm', 0, -2146827284), None)
以上
<広告>