「PythonからExcel」を扱う利点と「openpyxl」ライブラリの使い方

Python入門

Excelは日々の業務で最もよく使われているITツールと言っても過言ではないでしょう。
しかし、作業を効率化するためExcel VBAでマクロを組もうとして、Excel VBAの独特の記法に面食らった経験はありませんか?
使い慣れたPythonでマクロが組めたらいいですよね。
実は、PythonからExcelを操作するライブラリが数多く出ています。
この記事では、その中でもopenpyxlというライブラリを紹介します。
これで、ストレスなくマクロが組めますよ。

スポンサーリンク

PythonからExcelを操作する利点

言うまでもなく、第一に、普段使い慣れた言語でスクリプトが組める点です。Excelにさせたい高度な処理をPythonを使って書けます。これはコーディング時間の短縮をもたらします。

よくあるのが、Pythonプログラムの設定ファイルにExcelファイルを使ったり、Pythonプログラムの処理結果をExcelに格納したりすることです。使い慣れたExcelで設定ファイルが書ければ、ユーザーの利便性が上がります。直感的にも分かりやすいです。Pythonで見た目を整えるのは少しばかり技術が必要ですが、Excelに結果を格納すれば、結果を見た目よくユーザーに表示することができます。これらはPythonからExcelを操作する利点の一つです。

あとは処理時間の短縮でしょうか。一般的に、PythonはExcel VBAよりも高速で動作するようです。計算がややこしい部分をPythonで書き、マクロの処理速度を上げるのです。

openpyxl

openpyxlは、PythonからExcelを扱うライブラリの一つです。.xlsx形式のファイルが扱えます。

インストールは

pip install openpyxl

です。

Pythonプログラムの先頭で

import openpyxl

しましょう。

ブックを開く

wb = openpyxl.load_workbook('Excelファイル名')

でExcelファイルを開きます。後々使うので、必ず何かの変数に代入することを忘れずに。

ブックを閉じる

これは特にしなくても大丈夫です。Pythonプログラムが終了するとExcelは閉じます。

保存したい場合は、

wb.save('保存したいExcelファイル名')

で保存します。

シート指定

sheet = wb['シート名']

でシートを指定します。このシートも後々使うので、必ず何かの変数に代入しておいてください。

セルの値の取得

Excelの形式でセルの値を取得するときは、例えば

sheet['D2'].value

です。

行番号、列番号を用いてセルの値を取得することもできます。
D2セルなら

sheet.cell(row=2, column=4).value

です。Excel VBAと同じで、行番号、列番号はいずれも1から始まることに注意してください。

セルへの値の書き込み

これは取得と同じで、たとえばD2セルに0を書き込みたかったら

sheet['D2'].value = 0
sheet.cell(row=2, column=4).value = 0

です。

計算をしたいとき

例えば次のようなExcelファイルがあったとします。

ここで、D列に合計額を計算して書き、更に合計の合計を書くには、以下のようなPythonプログラムを書けばいいでしょう。

import openpyxl

wb = openpyxl.load_workbook('Excelサンプル.xlsx')
sheet = wb['サンプル']

sum = 0
for row in range(2,6):
    s = sheet.cell(row=row, column=2).value * sheet.cell(row=row, column=3).value
    sheet.cell(row=row, column=4).value = s
    sum += s

sheet['D6'].value = sum

wb.save('Excelサンプル.xlsx')

結果は次のようになります。

Excel関数を使いたいとき

たいていの場合Excelで計算するよりPythonで計算したほうが都合がいいですが、場合によってはExcel関数を使いたい、という場合もあるかもしれません。

数式をセルに書き込むには

sheet['D2'].value ='書き込みたい数式'
sheet.cell(row=2, column=4).value = '書き込みたい数式'

です。

これを用いて、先ほどのPythonプログラムを書き換えてみます。

import openpyxl

wb = openpyxl.load_workbook('Excelサンプル.xlsx')
sheet = wb['サンプル']

for row in range(2,6):
    sheet.cell(row=row, column=4).value = '=B' + str(row) + '*' + 'C' + str(row)

sheet['D6'].value = '=SUM(D2:D5)'

wb.save('Excelサンプル.xlsx')

無事に、先ほどと同じ結果が得られました。

セルを見てみると、数式が入っているのが分かります。

まとめ

今回は単純に合計を求めただけですが、少し工夫すれば、様々な計算ができます。

設定ファイルとしてExcelをユーザーに使用してもらう利点は大きいです。設定ファイルは得てして説明が煩雑になりがちですが、Excelであれば見ただけで分かり、また、Excelを操作できないパソコン使用者はほぼいないからです。テキストファイルで設定するのは困難でもExcelファイルならば、というユーザーは少なくありません。文字コードに煩わされずに済む利点も見逃せません。ユーザーフレンドリーなシステムを提供するのはシステム開発者の責務です。

このように、PythonからExcelを扱うのには大きな利点があります。Pythonを使って、ユーザーの業務を利便化してください。

最後に、本を紹介しておきます。


北野勝久、高橋宣成「PythonでかなえるExcel作業効率化」

今Python×Excelの本は数多く出ています。どれかを手に取ってみてください。

あなたのユーザーが、より便利になりますように。