こんにちは。@katsuhisa__です。
PythonのOpenPyXLモジュールを使い、面倒で退屈なExcel作業をPythonで自動化する方法をお伝えする連載の七記事目です!
連載一記事目はこちら。
前回は、OpenPyXLでExcelのフォントを設定する方法をご紹介しました。
今回は、PythonでOpenPyXLを使いExcelに数式を入力する方法を学習しましょう!
OpenPyXlでExcelに数式を入力する
早速、OpenPyXLでExcelに数式を入力する方法を学びましょう。
サンプルコードです。
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = 10
sheet['A2'] = 20
sheet['A3'] = 30
sheet['A4'] = '=SUM(A1:A3)'
wb.save('test_write_4.xlsx')
今回は解説の前に、期待する実行結果を考えてみましょう。
期待する実行結果
まず、A4セルには、数式「=SUM(A1:A3)」の計算結果である60(10 + 20 + 30)が書き込まれていて欲しいですね。
さらに今回は、セルに数式が入力されているので、カーソルを合わせると、計算式が画面上部のウィンドウ枠内に表示されて欲しいですね。
これらをふまえると、今回の場合、セルの表示は60で、カーソルを合わせると「=SUM(A1:A3)」が表示される状態が期待する実行結果と言えそうです。
実行結果
ここまで理解したところで、作成したtest_write_4.xlsxの中身を見てみましょう。
A4セルに、数式の計算結果である60が書き込まれ、A4セルの数式が、「=SUM(A1:A3)」となっていることが確認できました。
期待した通りの実行結果ですね!
数式を書き込むには文字列として数式を書き込む
さて、前述したコードですが、数式を書き込んだ部分はこちらです。
sheet['A4'] = '=SUM(A1:A3)'
見ての通り、セルに文字列としてExcelの数式を直接書き込んだだけですね。
何も覚えることはありません。
Excelの数式がどんな形式であるかさえ覚えていれば(もしくは、ググることさえできれば)、文字列として書き込むだけです。かんたんですね。
Pythonで同じ計算をする
さて、読者の中には、「そのままPythonで計算した結果を直接書き込めばいいのでは?」と思われた方もいるのではないでしょうか。
もちろんそうすることもできます。
例えば単に以下のような書き方をすればよさそうですね。
sheet['A4'] = 10 + 20 + 30
また、値がリストに入っているのであれば、A1〜A3セルへの書き込みも含めて、次のようにかんたんに書くこともできます。
numbers = [10,20,30]
for i, number in enumerate(numbers):
sheet.cell(row=i+1, column=1).value = number
sheet['A4'] = sum(numbers)
Pythonで書けば、Excelの数式の書き方を考える必要がないので、Pythonに慣れつつある方にとっては、こちらの方がスムーズに書くことができるでしょう。
OpenPyXLで数式入力する使い所は?
Excelに数式を書き込むか、Pythonで計算した結果をExcelに書き込むのはどちらがいいか?という問題の結論は、ケースバイケースだと言えるでしょう。非常に興味深い問題ですので、詳しく解説します。
例えばExcelに数式を書き込んでいた場合、Excelファイルを開いて、A1セルを直接更新した際、A4セルの合計値も更新されますね。
なぜなら、A4セルにはA1〜A3までを合計する数式「=SUM(A1:A3)」が入力されているからです。
しかし、Pythonで計算した結果だけを書き込んでいた場合、A4セルの値は更新されません。なぜなら、A4セルの値は、「=SUM(A1:A3)」ではなく、「60」だからです。
こういうシーンを想像すると、どうやらPythonで計算した結果だけをExcelに入力すると困りそうです。
そもそもOpenPyXLをなんのために使うのか?
ここまでの話はすべて、Excelファイルが存在する前提での話でした。しかし、そもそも今回のような利用ケースが実務で存在するのでしょうか?
例えば、合計値を計算するExcelファイルがすでに存在しているのであれば、Excelで直接値を追加すれば済む話です。
逆に、Excelファイルでないところにデータがたまっているのであれば、そもそもExcelを利用しなくてもよいはずです。Pythonでも構いません。
詰まるところ、OpenPyXLを使って、PythonでExcelに数式を書き込む利用シーンは限定的だと言えるでしょう。
みなさんの業務を顧みて利用すべき際には利用してみてください。その際も、難しいことは一切なく、「数式を文字列として書けば良い」これだけ覚えておけばOKです。
さいごに
以上、PythonでOpenPyXLを使いExcelの数式を入力する方法でした。
今回の記事では、使い方は最早解説がなくても良いのでは・・・というレベルでしたが、もっと大切な使い所の考え方についてじっくりと解説しました。
適切な使い所を考えることは、抽象化して物事を考える必要があるので、時にコードを書くよりも難しいこともあります。みなさんなりの意見を深めていただけると理解が深まるでしょう。
ちなみにPythonは、数値計算の強力なライブラリが非常に豊富です。
今回のように合計値を出すだけであれば、Excelでもいいかもしれませんが、「この計算は、Excelでやるのがどうにもたいへんそうだ・・・」という際には、ぜひPythonで計算する方法を調べてみてもよいかもしれません。
次回は、行と列のサイズを調整する方法をご紹介するのでお楽しみにしていてください。なお、予習を進めたい方は、『退屈なことはPythonにやらせよう』をお買い求めください。
本連載の更新情報は、管理人のタカハシ(@ntakahashi0505)さんのTwitterアカウントや、もちろん私のアカウント(@katsuhisa__)で配信していくので、もしよければ、フォローをお願いします!
書籍『Pythonでかなえる Excel作業効率化』発売のお知らせ
この連載が『Pythonでかなえる Excel作業効率化』という本になりました! Pythonの使い方の基本からだけでなく、Pythonでオフィス業務を効率化するために必要な知識をたくさん詰め込みました!ぜひお買い求めください。連載目次:PythonでExcelを操作するモジュールOpenPyXL
OpenPyXLというモジュールを使うことでPythonでExcelファイルを操作することができます。本シリーズでは初心者向けにExcelファイルの作業をPythonで自動化する方法をお伝えします。- PythonでExcel作業を自動化するOpenPyXLのはじめての使い方
- OpenPyXLで複数のセルの値を取得する方法
- OpenPyXLでExcelファイルの新規作成・保存を行う方法
- PythonでOpenPyXLを使ってExcelのシートを追加・削除する方法
- PythonでOpenPyXLでExcelのセルに値を入力する方法と編集する方法
- PythonでOpenPyXLを使いExcelのフォントを設定する方法
- PythonでOpenPyXLを使いExcelに数式を入力する方法
- PythonでOpenPyXLを使いExcelの行と列について色々な設定をする方法
- PythonでOpenPyXLを使いExcelの行と列を固定する方法
- PythonでOpenPyXLを使いExcelのグラフを作成する〜Chart関連オブジェクトの紹介〜
- PythonでOpenPyXLを使いExcelのグラフを作成する〜グラフのつくりかた編〜