LoginSignup
27
37

More than 3 years have passed since last update.

【備忘録】ExcelからPythonのコードを実行する(xlwings)

Posted at

他者のPC上で行う業務(Excelのデータ加工)の自動化のため、openpyxl + PyInstallerで自動化ツールを作成するものの起動が遅くてイライラ。かといって、Excel VBAを覚えるのもめんどくさい。もっと楽な方法ないかな~と思っていたら以下の記事を発見。

ExcelにPythonが搭載?その後 - xlwings を使おう

ExcelからPythonコードを呼び出して使えるとのこと。しかし、どうもうまくいかない。そんなときに以下の記事を発見。

【VBA】VBAからPythonのコードを実行してみる(1)【Python】

これが上手くいった。
Excelが入っているWindows PCにAnacondaインストール&ちょっと設定して貰えれば、ExcelファイルとPythonファイルを渡すだけで良くなりそう。
なので備忘録にまとめた。

環境

  • Windows 10 Home Edition
  • PyCharm Community Edition 2019.1.3
  • Anaconda 3(xlwings==0.15.8 pywin32==223)
  • Excel(Office 365)

ExcelからPythonコードを実行する(やり方)

前述の環境は整っている前提。xlwingsとpywin32はAnacondaとセットでインストールされる。

①Excel マクロ有効ブック(*.xlsm)を作成する

後で作成するPythonコードとExcel マクロ有効ブックは、
1)同じディレクトリにあること
2)ファイル名(拡張子より前)が同一であること
が動作の必要条件。それを考慮したファイル名にすること。
今回はファイル名を「excel_test.xlsm」とした。

②Excel VBEにxlwings.basをインポート

1)Excelを起動し、開発タブの「Visual Basic」をクリックしてVBEを起動
image.png

2)VBEのファイル>ファイルのインポートをクリックし、下記パスのファイル(xlwings.bas)を選択、インポート
パス:C:\Users{ユーザー名}\Anaconda3\pkgs\xlwings-{xlwingsのバージョン}-py{Pythonのバージョン}\Lib\site-packages\xlwings\xlwings.bas
image.png

インポートが成功していれば、下図のとおり、標準モジュールフォルダに「xlwings」ができる。
image.png

③Pythonファイルを作成

前述のとおり、Excel マクロ有効ブックと同じファイル名(拡張子より前)で、同じディレクトリに作成すること。
今回はファイル名を「excel_test.py」とし、コードは下記内容とした。

excel_test.py
# coding: utf-8

import xlwings as xw


def copy_add_text():
    txt = xw.Range('A1').value
    txt += ', I am the Doctor.'
    xw.Range('B3').value = txt

④VBEで標準モジュールを追加し、Pythonファイルのメソッドを呼び出すコードを記述

コードの内容は以下のとおり。

1  Option Explicit
2  
3  Public Sub copyText()
4      Call RunPython("import excel_test; excel_test.copy_add_text()")
5  End Sub

【補足】
4行目の引数は、"import モジュール名; モジュール名.メソッド名"とする。
※モジュール名=Pythonファイル名(拡張子不要)

⑤Excelの開発タブ>マクロにメソッドが追加されているので呼び出す

今回のコードは「●●, I am the Doctor.」の●●にA1セルの文字列が代入されたものをB3セルに貼り付けるというもの。
実行結果は下図のとおり。
image.png

その他

pywin32==227でwin32apiのインポートエラーが発生。
pywin32==224にしたら解決。
詳細は不明。

27
37
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
37