久しぶりのメモ
ここ最近、Pythonを使うことが多かったがどうしてもエクセルからpythonを動かしたいことができたのでしばらく試行錯誤し、ようやく実行できたのでそのメモ
必要なもの
・Python
・Excel
・xlwings
・pywin32
上2つは当たり前なので置いておくとして、下のxlwingsとpywin32だが、xlwingsはPythonのモジュールの1つでこれをインポートすることでExcelとpythonが相互に動かせるようになる。
もう一つのpywin32もモジュールの1つでwin32paiを動作するのに必要。
xlwingsのインストール
xlwingsのインストールは簡単でコマンドプロンプト上で
pip install xlwings
と入力したら終わり。
成功したかは画面を見たらおそらく分かるが、不安であればpythonをコマンドプロンプトで対話型で起動し
import xlwings
と入力し、問題なく次に進めば、とりあえず成功しているはずである。
Z:\Users\xxx\Desktop>python
Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import xlwings
>>>
pywin32のインストール
こちらはpipからのインストールではなくインストーラから行った。
https://pypi.python.org/pypi/pywin32
まず、上記リンクのDownload URLからファイルのあるページに飛び
Buildの一覧の中からインストールしたいバージョンを選ぶが、特に問題はないと思うので自分は最新の220を選択した。
続いて、Buildのページから自分のインストールしてあるPythonのバージョン、bit等に合わせてインストーラを落とす。自分は(確か)64bitでバージョンが3.4なので該当しているのを選んだ。
インストーラをダウンロードしたら通常通り、実行しインストールをしていけば問題はないと思うのでここは省略し、インストールに成功したかの確認だがxlwingsと同様に対話型のPython上で
import win32
と入力してみてエラーが無ければとりあえず、こちらも成功のはず。
Z:\Users\owner\Desktop\Stock\code>python
Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32
>>>
ようやく、ここから実際のプログラムを実行させる。
最初にVBAから実行させたいPythonのコードを用意する。
とりあえず、まずテスト用にExcelセルのA1の文字を取得し、B2に出力するだけのプログラムにする。ファイル名はVBA_Test.pyとした。
from xlwings import Workbook, Range
def testfunc():
wb = Workbook.caller()
gc = Range("A1").value
Range('B2').value = gc
次にExcelを用意するが、必ずPythonと同じフォルダに有ることが条件である違うフォルダにあると実行時にエラーがでるので忘れずに同じフォルダに置く。
私はPythonのコードは保存したがExcelをどこにも保存せずに実行したので何度もエラーになり躓いたので注意が必要である。
Excelの準備(マクロの有効化)
※ここではマクロの有効化の説明だけなので、コード等は下のモジュールのインポートから
Excel側の準備だが、まずExcelにxlwingsのモジュールをインポートする必要があるが、そのためにはVBAのコードを書くbookを開くが通常のExcelの設定ではマクロ等が無効になっているので有効化する必要がある。
有効化の手順は左上の[ファイル]→[オプション]→[リボンのユーザー設定]→[メイン タブ]の[開発]
にチェックを入れる。
モジュールのインポート
次にxlwingsのインポートだが、Alt + F11を押してVBAのコードを入手する画面を出したら、ツールバーの[ファイル(F)]の[ファイルのインポート]を選びxlwings.basをインポートする必要がある。
ファイルの場所は通常通りであればC:\Python34\Lib\site-packages\xlwingsの中にあると思われる。(少なくとも私はここにあった)
インポートが行われると左側のプロジェクト-VBAProjectの中に標準モジュールができ、中にxlwingsが入っている。
これで設定は終わりで、次はVBAコードになる。
VBAのコード
私はまだ、VBAを詳しく知らないのでとりあえずPythonを実行するだけのコードを載せる。
Sheet1(Sheet1)をダブルクリックしたらコードを書く欄が出てくるのでそこに以下を書いた。
Sub TestPy()
RunPython ("import VBA_Test;VBA_Test.testfunc()")
End Sub
RunPythonで中をimport Pythonのコード名;もう一度コード名.関数名で実行される。
セルのA1からB2へ内容がコピーされるコードなので、A1に適当な文字でも書いておく。
実行の方法は、コードを書く欄の少し上にあるビテオ等の再生みたいた緑色の三角かF5で実行される。
実行すると、どのマクロを実行するのか聞かれるので、自分の書いたマクロを選び実行をクリックする。
すると下記のようになり、成功した。
今のところはこのくらいの事しかできないが、とりあえずExcelからPythonを実行するとができたので良しとする。
今後の自分に期待。