こんにちは、えびかずきです。
今回はPythonの『xlwings』というライブラリを使って、Excelを操る方法について説明したいと思います。
ここではExcelからPythonを呼び出して使う方法を紹介します。
簡単に言うと、
1.xlwingsとExcelアドインをインストール
2.Excelファイルと同じディレクトリにpython(.py)を保存
3.アドインの『Run』ボタンからPythonを実行
という流れになります。
では順を追ってみていきましょう!
開発環境
- python:ver3.7.4
- anaconda3:conda-4.8.3package(xlwings,numpy含む)
- excel:Windows/Excel2016 (ver.2002)
- OS:Windows10 pro
- CPU:Intel Core i5-7200U
(64bitOS x64ベース) - PC:Surface
- editer:atom
ExcelからPythonを呼び出す手順
1.まずxlwingsをインストールしましょう。
下のようにpipでインストールできます。
$ pip install xlwings
※私の場合はAnaconda3のパッケージに元々含まれていたので、それを使いました。
Anacondaを使っている場合は、環境変数に以下のpathを通しておく必要がありますのでご注意を。
C:\Users\ユーザー名\Anaconda3 ←Pythonを実行する為
C:\Users\ユーザー名\Anaconda3\Library\bin ←DLLを参照する為
2.xlwingsのExcelアドインをインストールします。
githubのリリースページからアドインの『xlwings.xlam』ファイルをダウンロードし、Excelアドインを追加します。
Excelへのアドイン追加は下図のように、
『オプション』→『アドイン』→『設定』から追加できます。
アドインを追加できたら、xlwingsにチェックを入れて、有効化しましょう。
3.Pythonファイル(.py)を準備する。
今回は下のように、正規分布のランダムな数値を生成する関数を準備しました。
後で説明しますが、アドインのRunボタンを使う場合には、関数名を『main』にする必要があります。
#python_test.py
import xlwings as xw
import numpy as np
def main():
#標準正規分布(μ=0、σ=1)からランダムデータを出力
n=1000
xw.Range("A1").value = np.random.randn(n,1)
これをExcelで実行できれば、A1セルを起点として縦一列に1000個分のデータが貼り付けれることになります。
4.Pythonファイル(.py)を使うExcelファイルと同じディレクトリへ保存。
5.『xlwings』タブの『Run main』を押してPythonスクリプトを実行。
これによって同ディレクトリに保存したPythonスクリプトのmain関数が実行されることになります。
結果として下のように、1000個のデータがA列に貼り付けられました。
Runボタンを使わないやり方
アドインのRunボタンを使わなくてもVBAでPythonを呼び出すというやり方があります。
上の説明の「4.Pythonファイル(.py)を使うExcelファイルと同じディレクトリへ保存。」までは同じように勧めます。
その後、「Alt+F11」でVBAの開発画面を開いて、左枠プロジェクト内のxlwingsを選択します。
すると下図のように、パスワード画面がでますので、
『xlwings』
と入力します。
するとxlwingsのプロジェクトを編集できるようになります。
つづいて、下図のように標準モジュール→挿入→標準モジュールと選択します。
ここで下のようなVBAを実行すれば、Pythonを呼び出して実行することができます。
Sub main()
RunPython ("import xlwings_test; xlwings_test.main()")
End Sub
個人的には、上で説明したアドインのRunボタンを使う方が好きです。
こちらのやり方だと汎用性があって便利な反面、副作用としてエクセルを「.xlsm」形式で保存する必要があります。
エラーへの対処
AnacondaでPythonをインストールしている私の環境では、xlwings使用開始過程でエラーが頻発したので備忘録として、対処法を残しておきます。
Pythonが参照できない場合①
エラーメッセージ:
‘python’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
このようなエラーメッセージが出る場合は、おそらく環境変数でPythonが存在するディレクトリのPathが通っていません。
Anacondaを使っている場合は、下のPathを通しましょう。
C:\Users\ユーザー名\Anaconda3
Pythonが参照できない場合②
エラーメッセージ:
Python was not found but can be installed from the Microsoft Store: https://go.microsoft.com/fwlink?linkID=2082640
このエラーメッセージが出る場合も上の①と同じ対処法ですが、PythonのインストールURLを紹介するためだけの邪魔な「Python.exe」ファイルのPathが通っています。
C:\Users\casas\AppData\Local\Microsoft\WindowsApps
この環境変数でPathを設定する時に、上記Pathよりも優先度が高くなるように注意しましょう。
設定画面でより上の欄に入力すればOKです。
numpyがうまく使えない場合
エラーメッセージ:
Traceback (most recent call last):
File “”, line 1, in
File “c:\users\casas\desktop\xlwings-test\xlwings_test.py”, line 4, in
import numpy as np
File “C:\Users\casas\Anaconda3\lib\site-packages\numpy__init__.py”, line 140, in
from . import _distributor_init
File “C:\Users\casas\Anaconda3\lib\site-packages\numpy_distributor_init.py”, line 34, in
from . import _mklinit
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
このようなエラーメッセージが出る場合は、DLL(ダイナミックリンクライブラリ)のPathが通っていません。
Anacondaを使っている場合は、下記のPathを通しましょう。
C:\Users\ユーザー名\Anaconda3\Library\bin
まとめ
今回はxlwingsというライブラリを使って、ExcelからPythonを呼び出して実行する方法について説明しました。
はじめは設定が少し面倒ですが、PythonでExcelを操作できるようになれば、もはやVBAでコードを書く必要がなくなりますので、非常に便利です。
これからはPythonを極めてVBAとはおさらばしましょう!
参考
本記事は下のWebサイトを参考にしました。
xlwingsクイックスタート
https://docs.xlwings.org/ja/latest/quickstart.html
コメントを書く