42
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

脱VBA Excelツール! Pythonをインストールできない環境におけるVBAツールをPythonで駆逐する

Last updated at Posted at 2016-07-02

Pythonをインストールできない環境なのにPython!?

な、何を言っているのかわからねーと思うが、俺もわからない・・・ということもなく、わかる人にはわかる話かもだけど。

とある業界では未だにVBAによるExcelツールは活発に使われている。

やはりユーザ業務におけるExcelの存在感は圧倒的であり、
そのためどうしてもExcelVBAが必要になってくる。

だから、普通にVBAを書けばいいじゃんというのは最もだと頭ではわかっているんだけど、

でもやはりVBAは体が受け付けない、

RubyなりPythonなりもっと流行り(?)の言語でツールを作りたい!

ということで、PythonでExcelVBAツールを駆逐しようという話。

ただ、とある業界では業務端末にPythonをインストールすることが難しい。
(当然、調整のうえ可能な場合もあるが)

そこで、Pythonをインストールできない環境でもPythonベースで作ったExcelツールを
実行するための手順を書いてみる。

その前に

この投稿は正確にはxlwingsを使ってPythonでExcelにあれこれするツールが対象です。

xlwingsについて知らない場合、事前に以下の投稿を読んで見てください。

Python(Xlwings)を使ってExcelを操作してみる
ExcelからPythonを実行する

ツールを作成する環境

環境 バージョン
window 7
python 3.4.3 (Anaconda 2.3.0)
pyinstaller 3.2

※作ったツールを実行する環境もwindows7です

方法

  • Excelから実行したいpythonのスクリプトをexe化
  • xlwingsを使ってExcelから作成したexeを実行して、実際の処理を実行する

準備

exe化するためのパッケージpyinstallerをインストールする

conda install pyinstaller

pyinstaller -v

手順

作成したpythonスクリプトをexe化する


pyinstaller tool.py --onefile

作成したexeファイルをExcelから実行するようにマクロを定義する


Sub SampleCall()
    RunFrozenPython ("tool.exe")
End Sub

以前書いたpythonのスクリプトを実行する場合の以下のコードを上のコードに置き換えるイメージ


Sub SampleCall()
    RunPython ("import myproject;myproject.myfunction()")
End Sub

ただし、exeを呼ぶときは実行したいfunctionを指定できないみたいなので、
pythonスクリプト側で、スクリプトが実行された場合に
呼びたいfunctionが実行されるようにしておく必要がある。

終わり

これで、登録したマクロを実行すれば、exe化したpythonスクリプトが実行され、あれこれ処理が実行される。

これでDBからデータを取得して、あれこれ加工して、Excel上に値を貼り付け、
帳票を作成するなんてツールをVBAを一切書かないでPythonでかけるようになった\(^o^)/

感想

まぁこんな遠回りするくらいなら、おとなしくVBAを書けよって話なんだろうなw
一応これでちゃんとツールは作れるんだけど、xlwingsを使ったスクリプトをexe化すると
それだけで130MBくらいのツールになる(苦笑)

本業務で使うかというと・・・(´・ω・`)

42
48
0

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
42
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?