はじめに
本日は、xlwingsを使用してPythonとExcelという2つの強力なツールを統合し、日常業務のデータ処理をより効率的に行う方法を紹介します。
Excelはデータ処理の分野で王道の存在であり、その歴史は30年以上にも及びますが、現在でも世界中で7億5千万ものユーザーがいます。一方、近年人気を博しているPythonは、開発者数が700万人に達しています。
驚くことに、Excelは世界で最も人気のあるプログラミング言語です。LAMBDA関数の導入により、Excelはアルゴリズムを実装できるようになり、JavaScript、Java、Pythonと同じくチューリング完全性を備えています。
小規模データの処理には非常に便利ですが、大規模データを扱うには限界があります。VBAによるデータ処理も可能ですが、本稿ではPythonのサードパーティライブラリであるxlwingsを取り上げます。これはPythonとExcelの間の橋渡し役となり、VBAからPythonスクリプトを呼び出して複雑なデータ分析を簡単に実現できます。
なぜPythonとExcel VBAを統合するのか?
VBAはExcelに組み込まれたマクロ言語であり、自動化、データ処理、分析モデリングなど、ほぼすべてのことを行うことができます。では、なぜPythonをExcel VBAと統合するのでしょうか?主な理由は以下の3点です。
- VBAに詳しくなくても、Pythonで分析関数を記述し、Excelでの計算に利用できます。
- PythonはVBAに比べて実行速度が速く、コードもより簡潔で柔軟です。
- Pythonには多くの優れたサードパーティライブラリ(pandas、numpyなど)があり、これらをExcelのデータ分析に活用できれば、仕事の効率が大幅に向上します。
なぜxlwingsを選ぶのか?
PythonにはExcelを操作するためのライブラリが多数存在します(xlsxwriter、openpyxl、pandas、xlwingsなど)。しかし、他のライブラリと比較して、xlwingsは総合的なパフォーマンスが最も優れており、ExcelのマクロからPythonコードを呼び出す機能も備えています。
xlwingsのインストールは非常に簡単で、コマンドラインでpipを使用して実行できます。
pip install xlwings
xlwingsをインストールした後、Excel統合アドインをインストールする必要があります。インストール前にすべてのExcelアプリケーションを閉じないと、エラーが発生します。コマンドラインで以下のコマンドを実行します。
xlwings addin install
上記のメッセージが表示されれば、アドインのインストールは成功です。
xlwingsとアドインの両方が正常にインストールされると、Excelを開くとツールバーにxlwingsのメニューが表示されます。これはVBAがPythonスクリプトを呼び出すための橋渡し役です。
また、メニューバーに「開発ツール」が表示されていない場合は、「開発ツール」をリボンに追加する必要があります。
- 「ファイル」タブで、「カスタマイズ>オプション」に移動します。
- 「カスタマイズ リボン」と「メイン タブ」の下で、「開発ツール」チェックボックスを選択します。
「開発ツール」がメニューバーに表示されれば、マクロの使用を開始できます。マクロは、自動化およびバッチ処理を実現するツールと理解してください。
これで準備は完了です。さっそく実践に入りましょう!
xlwingsの基本操作
ExcelからPythonスクリプトを呼び出すにはVBAプログラムを記述する必要がありますが、VBAに不慣れな方にとっては面倒な作業です。しかし、xlwingsはこの問題を解決し、VBAコードを書かずに直接ExcelからPythonスクリプトを呼び出して、結果をExcelシートに出力できます。
xlwingsは`.xlsm`と`.py`の2つのファイルを作成してくれます。`.py`ファイルにPythonコードを記述し、`.xlsm`ファイルで実行するだけで、ExcelとPythonの連携が完了します。
これらのファイルを作成するには、コマンドラインで以下のコマンドを実行するだけです。
xlwings quickstart ProjectName
ここで`ProjectName`は任意の名前で、作成されるファイルの名前になります。ファイルを特定のフォルダに作成したい場合は、事前にコマンドラインをそのディレクトリに移動させておく必要があります。
作成後、指定されたフォルダに`.xlsm`と`.py`の2つのファイルが表示されます。
`.xlsm`ファイルを開くと、これはExcelマクロファイルであり、xlwingsがすでにPythonを呼び出すためのVBAコードを記述しています。`Alt + F11`を押すと、VBAエディターが起動します。
Sub SampleCall()
mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
RunPython "import " & mymodule & ";" & mymodule & ".main()"
End Sub
このコードは主に2つのステップを実行します:1. `.xlsm`ファイルと同じ場所で同じ名前の`.py`ファイルを検索する。2. `.py`スクリプト内の`main()`関数を呼び出す。
まずは簡単な例として、Excelシートに`['a','b','c','d','e']`を自動的に入力してみましょう。
ステップ1:`.py`ファイル内のコードを以下のように変更します。
import xlwings as xw
import pandas as pd
def main():
wbk = xw.Book.caller()
data_list = [10, 20, 30, 40, 50]
wbk.sheets[0].range('A1').value = data_list
@xw.func
def square(num):
return num * num
if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()
次に、`.xlsm`ファイルの`sheet1`にボタンを作成し、デフォルトのマクロを設定してトリガーボタンにします。
トリガーボタンを設定したら、それを直接クリックすると、最初の行に`[10, 20, 30, 40, 50]`が表示されます。
同様に、アヤメのデータセットをExcelに自動的にインポートすることもできます。`.py`ファイル内のコードを以下のように変更するだけです。
import xlwings as xw
import pandas as pd
def main():
wbk = xw.Book.caller()
df = pd.read_csv(r"E:\\test\\PythonExcelTest\\iris.csv")
df['avg_width'] = (df['sepal_width'] + df['petal_width']) / 2
wbk.sheets[0].range('A1').value = df
@xw.func
def square(num):
return num * num
if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()
これで、ExcelからPythonスクリプトを呼び出す全プロセスが完了です。機械学習アルゴリズムの実装、テキストクリーニング、データマッチング、自動レポート作成など、他にも面白い使い方を試してみてください。
ExcelとPythonを組み合わせることで、その可能性は無限大です。