「PythonでExcelを操作する方法」と「ExcelからPythonを実行する方法」

PythonExcelの組み合わせについて備忘録として書きます。

Pythonを使いたい背景

Excelに関連する業務効率化やルーティン作業の自動化を目的として、世間ではExcel VBAがよく使われています。VBA自体は非常に便利ですが、VBAには「コードの可読性が低い」「手の込んだことをやろうとするとコードが複雑になってしまう」といったデメリットが存在します。これらの要因は保守性の悪化に繋がり、よくあるマクロ属人化問題の原因になります。

Pythonにはpandasという表形式データ処理の強力なライブラリがあるので、複雑なデータ処理やテーブルのデータ結合を比較的シンプルなコードで実現することができます。VBAでfor文を何重にも回す書き方でもpandasでは1行あるいは数行で済むことが多々あります。シンプルなコードで作れたら属人化問題もある程度は解消できるはず。これが私の「Pythonを使いたい」という動機です。かつてクソマクロを作ってきた自分自身の反省でもあります。

「自分以外のPCでどうやってPythonプログラムを実行する?」という問題

VBAの代わりにPythonでプログラムを作ろうと考えたとき、自作のPythonプログラムを自分以外のPCでも使用したいがどうする?という問題が生じます。会社PCだとインストーラーを使ったソフトウェアインストールにはシステム申請が必要なケースが多くやや面倒です。Pythonプログラムを別のPCでも使いたい場合、Pyinstallerなどのツールを使用してPythonプログラムをexe化をするという方法があります。これは一般的な手法ではありますが、exe化のデメリットとして「非常に容量の大きいexeファイルが出来上がる」「起動に時間がかかる」「スクリプトを修正するたびにコンパイルしないといけない」などがあります。

いろいろ考えましたが結論の解決策としては、インストール不要のPythonを使用することにしました。インストール不要でポータブルな WinPython というやつがあります。

winpython.github.io

軽量版のdotであれば圧縮ファイルで約40MB、解凍後でも約250MBです。これをPCにダウンロードして解凍したフォルダを適当な場所に置くだけでPython環境の構築が完了します。ライブラリはほとんど入ってないので自分で必要な分だけライブラリをインストールする必要はあります。

PythonExcelを操作する方法

PythonExcelファイルを扱うライブラリで有名なのは以下の2種類です。

  • openpyxl
  • xlwings

紹介してるサイトがたくさんあるので詳しい説明は省きますが以下の通りです。

  • openpyxl:Excelファイルを直接いじる。ExcelをインストールしていないPCでも利用可。
  • xlwings:Excelのアプリケーション自体を操作してExcelファイルの編集を行う。Excel VBAのイメージに近い。PCにExcelが入っていないと利用不可。

単純にExcelファイルからデータを読み出したり書き出したりするならopenpyxlでよいです。VBA的にExcelを扱いたければxlwings一択です。自分の使い方としては、xlwingsでメインのExcelファイルを扱いつつ、別ファイルをopenpyxlで読み出してデータをDataFrameに変換する、という感じです。

ExcelからPythonを実行する方法

以下の動画の通りにやればExcelマクロからPythonスクリプトを実行できます。

www.youtube.com

データ処理を行いたいExcelファイルのシート上にボタンを作ってマクロを登録してやれば超簡単にPythonを実行できます。動画では以下の2種類が紹介されています。

  1. "xlwings addin install"でExcelアドインをインストールする方法
  2. "xlwings quickstart プロジェクト名 --standalone" でアドイン不要のExcelマクロファイルを生成する方法

個人的にはExcelにはあまりアドインは入れたくないので2番目のやり方を採用します。参考記事を以下に添付します。

【保存版】Excel GUIのPython実行ツールを作ろう(xlwings) #VBA - Qiita

入力用セルやボタンを組み合わせたらそれだけで立派(?)なGUIアプリになります。全部Excel上で完結できたらPythonGUIアプリ作成方法を学習する手間も省けます。Excelのデータ処理が目的ならわざわざGUI用ライブラリを使う必要もないです。

まとめ

以上、PythonExcelの組み合わせに関するメモでした。xlwingを活用すればExcel上でそれっぽいPythonGUIアプリを作成できます。WinPythonを使えばインストール不要でPython環境を構築できます。この2つを組み合わせることにより、社内用の業務効率化アプリが出来ますという内容でした。