MENU

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

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の本は数多く出ています。どれかを手に取ってみてください。

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

管理人のよしぞと申します。
フリーランス業界で働いている管理人が、業界で働く様々な視点からフリーランスエンジニアに挑戦するためのノウハウを掲載。独立を考えている方にとって手助けになるサイトを目指しています。

目次