PythonでExcelを操る方法【xlwings編】

PythonでExcelを操る方法【xlwings編】
https://www.xlwings.org

こんにちは、えびかずきです。

今回は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

エクセルカテゴリの最新記事