エクセル操作中に、Pythonを実行したいときがあります。
実はPythonでExcelを操作するライブラリのなかで、xlwingsであればそれが可能です。(OpenpyxlはVBAを実行することは難しい)
この記事では、エクセルからPythonプログラムを実行する方法について紹介していきます。
・エクセルVBAでPythonを動かす方法
以下で詳しく紹介していきます。
目次
エクセルVBAからPythonを実行するメリット
1. PythonをVBAに置き換える必要がない
2. エクセルを操作中にPythonを動かすこと可能
3. エクセルのボタンでPythonを実行させることが可能
1. PythonをVBAに置き換える必要がない
VBAからPythonを実行するメリットの一つに「VBAをPythonに書き換える必要がない」ことがあります。
たとえば職場でPythonプログラムは書けるけれど、VBAプログラムはそこまで知識がない人がいるとします。
そのような人は、VBAプログラムを作る必要がありますが、わざわざ最初からVBAを学ぶのはメンドウです。
しかしPythonで記載されたプログラムをVBAで実行することができれば、PythonからVBAへの書き換えが不要です。
そのためVBAの学び直しがなくなります。
2. エクセルを操作中にPythonを動かすこと可能
VBAからPythonを実行できるようになるメリットに、エクセル操作中にPythonプログラムを動かせることがあります。
エクセル作業中にPythonプログラムを実行したいとき、エクセルを閉じたりPythonプログラムを実行したりする工程を踏まないといけないことが多々あります。
しかし、エクセル操作中にPythonを使うことができれば、メンドウな工程を踏む必要がなくなります。
3. エクセルのボタンでPythonを実行させることが可能
エクセルを使うときにボタンにマクロを設定しておき、ボタンクリックで作業を行いたいときがあります。
このときボタンに設定できるプログラムは、原則VBAです。
しかしこの記事で紹介する方法を使えば、エクセルのボタンクリックでPythonを実行させることができます。
これにより、エクセルから必要なPythonプログラムを動かせるようになります。
VBAをPythonを実行するなら、openpyxl, win32com, xlwingsどれ?
・openpyxl|VBAからPython実行はできない
・win32com|VBAからPython実行はできない
・xlwings|VBAからPython実行可能
PythonからVBAを実行できるライブラリとそうではないライブラリがあります。
PythonでExcelを操作するときによく使うライブラリについて、カンタンに解説をしておきます。
openpyxl
openpyxlはPythonでExcelを操作するときに、よく使われるライブラリです。
しかし少なくとも私が調べた限りでは、openpyxlではエクセルからpythonを実行することは難しいです。
win32com
win32comはPythonでExcelだけでなくOutlookも操作できるライブラリです。
Microsoft Officeのアプリケーション全般を操作できると考えてもらえればよいです。
しかし少なくとも私が調べた限りでは、win32comではエクセル操作中にpythonを実行することは難しいです。
xlwings
xlwingsライブラリは、PythonでExcelを操作するときに使えるライブラリです。
このライブラリを使うと、エクセル操作中にPythonを実行することが可能です。
詳しい使い方は以下で解説します。
xlwings|ExcelマクロVBAからPythonを実行する方法
手順1. xlwingsをインストール
手順2. Pythonプログラムを作成
手順3. Visual Basicの設定変更
手順4. VBAプログラムの作成
手順5. VBAからPythonを実行
以下で手順ごとに解説していきます。
手順1|xlwingsモジュールをインストール
以下のライブラリをインストールします。
pip install xlwings
xlwingsの具体的なインストール方法
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install xlwings」と入力して[Enter]
4. インストール完了
これでインストールが完了し、xlwingsを使えるようになります。
手順2-A|Pythonプログラムを作成
本事例では、以下のPythonプログラムを作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# プログラム1|ライブラリ設定 import xlwings as xw # プログラム2|mainプログラムの実行 def main(): # プログラム3|pythonとエクセルを接続 wb = xw.Book.caller() # プログラム4|Sheet1に数値を出力 ws = wb.sheets('Sheet1') for i in range(2, 6): ws.range('B' + str(i)).value = i # プログラム5|エクセルファイルを「Sample1.xlsm」として保存 wb.save(r'D:\DropBox\Dropbox\Python\Program\100_Excel\199_Python_from_VBA\Sample1.xlsm') |
ここのプログラムを複雑にすれば、複雑な処理を実行できます。
今回はExcelでPythonを動かす方法がメインなので、敢えてシンプルなプログラムを作成しました。
手順2-B|Pythonプログラムを解説
手順2-Aで記載したPythonプログラムの解説をします。
プログラム1|ライブラリ設定
1 2 |
#プログラム1|ライブラリ設定 import xlwings as xw |
xlwingsをxwとして呼び出します。VBAからPythonを呼び出すときに使用するエクセル操作のライブラリです。
プログラム2|ライブラリの設定
1 2 |
# プログラム2|mainプログラムの実行 def main(): |
mainプログラムを作ります。
今回の事例では、VBAからこのmainプログラムを実行します。
プログラム3|pythonとエクセルを接続
1 2 |
# プログラム3|pythonとエクセルを接続 wb = xw.Book.caller() |
ここでpythonとエクセルをつなぎこみを行います。
プログラム4|Sheet1に数値を出力
1 2 3 4 |
# プログラム4|Sheet1に数値を出力 ws = wb.sheets('Sheet1') for i in range(2, 6): ws.range('B' + str(i)).value = i |
「Sheet1」の2行目から5行目まで数値(2~5)を入れていきます。
プログラム5|エクセルファイルを「Sample1.xlsm」として保存
1 2 |
# プログラム5|エクセルファイルを「Sample1.xlsm」として保存 wb.save(r'D:\DropBox\Dropbox\Python\Program\100_Excel\199_Python_from_VBA\199_1_Python_From_VBA\Book2.xlsm') |
ファイルを所定フォルダに保管します。
ここで作成したPythonプログラムをExcelから実行できるように設定をしていきます。
手順3. Visual Basicの設定変更
2. [Alt] + [F11]でVisual Basicを起動
3. xlwingsのModuleを作成
以下で手順を解説していきます。
1. エクセルを起動
エクセルを起動します。ここでは新規のエクセルを準備しました。
今回扱うエクセルファイルは、手順2で作成したPythonプログラムと同じフォルダに保存しておきます。
今回紹介するプログラムは、PythonプログラムとExcelファイルが同じフォルダに存在しないとエラーが出ますので、注意ください。
2. [Alt] + [F11]でVisual Basicを起動
[Alt]を押しながら[F11]を押すことで、ショートカットキー操作でVisual Basicを開くことができます。
3. xlwingsのModuleを作成
3-2. 「ファイル」タブの「ファイルをインポート」をクリック
3-3. 「xlwings.bas」をクリック(xlwingsのライブラリフォルダに保存)
3-4. 「開く」をクリック
3-5. 「xlwings」モジュールが作成されていることを確認
「xlwings」モジュールが作成されていることを確認できたら、次へ進みます。
手順4. VBAプログラムの作成
4-2. 「挿入」タブの「標準モジュール」をクリック
4-3. 「Module1」が作成される
4-4. VBAプログラムの作成
ここで記入したプログラムは以下です。
1 2 3 |
Sub Run_Python() RunPython ("import RunPythonFromVBA;RunPythonFromVBA.main()") End Sub |
Pythonファイル名とPythonプログラムは以下のとおりです。
– Pythonプログラム:main
Pythonファイル名はPythonプログラムの「.py」を除いた名称です。
Pythonプログラムは「def xxx()」のxxxの部分を入れ込みます。
手順5. VBAからPythonを実行
VBAプログラムをF5を押してプログラムを実行すると、Pythonが実行されます。
手順解説はここまでです。
Excel VBAで出来ることを理解しておくとPythonの幅が広がる
ここまでExcelマクロVBAからPythonを実行する方法を紹介してきました。
VBAからPythonを実行することで、エクセル作業をさらにラクにすることができます。
このとき、VBAでどのようなことが出来るか理解しておくと、さらにVBAの強みを活かすことができます。
以下でVBAで出来ることをまとめていますので、興味がある人はご覧ください。
PythonとVBAの両方を上手く組み合わせることで、さらに仕事を効率化できるので、ぜひチャレンジしてみてください。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Python×効率化のサンプル
Pythonで効率化できる事例をサンプルコード付きで紹介しています。
Python×Excel
PythonとExcelで自動化できることを紹介しています。
事例も数多く紹介しているので、ぜひ参考にしてみてください。
Python×PDF
PythonとPDFで自動化できることを紹介しています。
Pythonって難しい?
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。