はじめに
結婚して以来おれがずっと家計を預かっており、家計管理にはExcelを使用している。
上記Excelファイルは、この記事を書き始めている2023-01-01時点で既に明細が75,000行を超えている。
家計簿の目的として明細を元に科目や月ごとの集計を行う必要があるが、データ量が多くてExcelの式では性能的に問題がある。平たく言うと重い。実用に耐えられないほど重い。
※念のため書くがこれはExcelが悪いのではなくデータ量の問題である。本来は既にExcelを使うべきではないと思料する。
そのため、VBAでExcelマクロを書き、Excel上に配置したボタンを押下する事で集計処理を行う造りにしている。
上記の運用に切り替えてから恐らく10年近くが経過していると思われるが、既に記憶は定かではない。そして定かではない記憶で作業をするため、何か改修しようと毎回大変な目に遭っている。過去の自分が書いたものとは言え、今更VBAのソースを読み解くのは相当ダルいし、今更VBAというのもモチベーションが上がらない。
この状況を毎年何とかしたいなあと思いながら過ごしているので、今回はxlwingsを用いてExcelからPythonで処理を書くようにしてみようと思う。
例によって飽きてしまって中途半端に終わるかも知れないが、作業メモも兼ねて残しておく。
なお、取っ掛かりとしてはこちらのサイトを参考にさせて頂いた。
xlwingsのインストール
テスト用に、venvにてsandboxという名で仮想環境を作成してインストールを行った。
ターミナルとしてはPowerShellを使用している。
PS C:\dezikomoe_python\sandbox> python -m venv sandbox
Scripts配下に生成されるActivate.ps1を実行して仮想環境に入る。
PS C:\dezikomoe_python\sandbox> C:\dezikomoe_python\sandbox\sandbox\Scripts\Activate.ps1
pip listでバージョンが古いと警告が出るので最新化をする。お決まりの手順。
(sandbox) PS C:\dezikomoe_python\sandbox> pip list
Package Version
---------- -------
pip 19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 22.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
言われた通りにpython -m pip install --upgrade pip
する。
(sandbox) PS C:\dezikomoe_python\sandbox> pip install xlwings
Collecting xlwings
Downloading xlwings-0.28.7-cp37-cp37m-win_amd64.whl (1.6 MB)
---------------------------------------- 1.6/1.6 MB 25.0 MB/s eta 0:00:00
Collecting pywin32>=224
Downloading pywin32-305-cp37-cp37m-win_amd64.whl (12.2 MB)
---------------------------------------- 12.2/12.2 MB 34.4 MB/s eta 0:00:00
Installing collected packages: pywin32, xlwings
Successfully installed pywin32-305 xlwings-0.28.7
そしてpip install xlwings
でインストール完了。ここまでは何も難しい事は無い。
(sandbox) PS C:\dezikomoe_python\sandbox> pip list
Package Version
---------- -------
pip 22.3.1
pywin32 305
setuptools 41.2.0
xlwings 0.28.7
アドインのインストール
公式サイトから前提条件を抜粋する。
https://docs.xlwings.org/ja/latest/installation.html
- xlwingsはExcelのインストールを前提としているため、WindowsとmacOSでしか動作しません。また、macOSでは現在UDFをサポートしていません。
- xlwingsはPython 3.6以上で動作します。
前述の通り、今回はPythonからExcelを操作するのではなく、ExcelからPythonを呼び出しするのが目的である。
上記を実現するために、xlwings addin install
を叩いてアドインをインストールする。
(sandbox) PS C:\dezikomoe_python\sandbox> xlwings addin install
xlwings version: 0.28.7
Successfully installed the xlwings add-in!
問題なく成功した。アンインストール時の留意点については先の公式サイトに記載がある。
アドインインストール後の起動
参考にならないかも知れないが、この時点のExcelのバージョン情報も残しておく。(ファイル→アカウントで確認)
ExcelはOffice365で使用している。
テスト用に「test.xlsm」を用意した。
マクロを使うため、拡張子は.xlsxではない事に注意。書くまでもないが、「test.xlsx」を新規作成してからExcelで左記を開き、名前を付けて保存でxlsmを指定するだけだ。
リボンメニューを見ると既にxlwingsのメニューが追加されていたが、ここは日本語化されていない。
以下未済