まえがき
Excel Advent Calendar 2014
に空きがあったので、
前々からやりたかった「xlwings」の記事を書いた。
ちなみに僕はBlogあるので、Qiitaに何もなかったからいい機会だ。
xlwingsとは?
VBAでマクロなんて書きたくない人用にPythonでマクロが書けるモジュール。
公式サイトはここですね。
xlwings
インストール
pip install xlwings
virtualenvでインストールすると上手く実行できないようだ(多分)。
OSのPythonにインストールした方がいい。
サンプルの実行
ここにクイックスタートが有る。
しかし、僕は少しハマったのでクイックではなくなったが・・。
まず、Excel自体をどこかに保存しておく。
僕はMac OS Xを使ってるので、
/Users/shinriyo/Documents
へ、「ブック1.xlsx」の名前でExcelファイルを保存した。
※日本語でOK!でしたが、怖い人は半角英数字で。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
from xlwings import Workbook, Range
def rand_numbers():
""" produces standard normally distributed random numbers with shape (n,n)"""
wb = Workbook.caller() # Creates a reference to the calling Excel file
n = Range('Sheet1', 'B1').value # Write desired dimensions into Cell B1
rand_num = np.random.randn(n, n)
Range('Sheet1', 'C3').value = rand_num
のように「mymodule.py」を「ブック1.xlsx」と同じ階層に置く。
同じ階層に置くことが重要!(大事なことなので二回言いました。)
/Library/Python/2.7/site-packages/xlwings
にxlwings.bas
ファイルがあるはず。
VBAのコードは
Sub RandomNumbers()
RunPython ("import mymodule; mymodule.rand_numbers()")
End Sub
そして、Excel上のB1には任意の数字を記載。
RandomNumbersを実行!
すると先ほどの画像のようになる。
たてよこに5追加される。
Range('Sheet1', 'C3').value = u'日本語'
などで日本語も出来るので実験してみるといい。