【openpyxlで数式を書き込み】関数をセルに自動入力

スポンサードリンク
アイキャッチ Python
過去の自分
過去の自分

エクセルのA1セルにB1を参照する式を書き込みしたいんだけど、
openpyxlでセルに数式を書き込みする方法を教えて!

今の自分
今の自分

了解!

  • 別のセルを参照する式を書き込む方法
  • 数式を書き込みして計算する方法
  • 関数を書き込みする方法

を解説いたします!

【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。

スポンサードリンク

openpyxlでセルに数式を書き込みするには

「’=B1’」のように記述します。まずは実行見本をどうぞ。

実行見本

見本

全コード

ひとまず全コードを網羅します。解説は後ほど行います。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']

ws['A1'] = '=B1'
ws['A2'] = '=B2+C2'
ws['A3'] = '=SUM(B3:D3)'

wb.save('output.xlsx')
ws['A1'] = '=B1'
ws['A2'] = '=B2+C2'
ws['A3'] = '=SUM(B3:D3)'

事前準備

  • openpyxlのインストール

既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。

openpyxlのインストール方法

openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install openpyxl

※openpyxlを使用したことがある場合は、このインストール作業は不要です。

openpyxlの基礎解説

既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。

解説:セルに数式を書き込みする

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

セル参照を書き込み

ws['A1'] = '=B1'

上記のように記述することで、「A1」セルに「=B1」と書き込みすることができます。
手動でエクセルに書き込みするときと同じですね。

【実行見本】

見本

注意点は下記の2つです。

  • 「’=C1’」の「=」を書き忘れないこと
  • 「’=C1’」のように「’(クォーテーション)」で囲うこと

<テンプレ>
【 ‘=数式 】

では次に、計算式を書き込みしてみましょう。

計算式を書き込み

ws['A2'] = '=B2+C2'

上記一文にて、「A2」セルに「=B2+C2」を書き込みできます。
前項のセル参照と同様に「=」と「’」を忘れないようにしましょう。

【実行見本】

見本

関数を書き込み

関数を書き込みすることもできます。

ws['A3'] = '=SUM(B3:D3)'

【実行見本】

見本

今回は簡単な「SUM」関数にしましたが、「vlookup」や「if」関数も書き込むことができます。

「’」や「”」を書き込む際の注意点

書き込みたい関数や数式の中に「’」「”」が入っている場合は注意が必要です。
下記の例を見てください。

ws['A4'] = '=SUBSTITUTE(B4,"'","")'

これは「SUBSTITUTE」関数を書き込んで「B4」セルの「’」を外そうとした例です。
実行してみると、「SyntaxError: EOL while scanning string literal」というエラーが発生します。
これは、右辺の「’」の数が合わない(通常は偶数になるが今回は計3点になっている)ためです。

書き込む内容に「’」や「”」を入れたい場合は注意しましょう。

例の場合では、「Python」の「replace」関数で代用できます。

ws['A4'] = ws['B4']
ws['A4'] = ws['A4'].value.replace("'","")
スポンサードリンク

うまく動作しない時

「=B1」など、数式がそのまま表示される

セルの表示形式が「文字列」や「ユーザー定義」になっている場合、「=B1」などと表示される場合があります。
これでは数式として機能していませんので、セルの表示形式を変える必要があります。

下記のコードを追加して、セルの表示形式を「標準」にしてください。

ws['A1'].number_format = FORMAT_GENERAL

エラーが出る

EOL while scanning string literal

SyntaxError: EOL while scanning string literal」が出た場合は構文エラーの可能性が高いです。

文頭や文末の「’」が抜けていたりしませんか?
また、書き込みたい数式や関数に「’」や「”」が含まれる場合は、
「’」や「”」を書き込む際の注意点で解説したように、代用が必要になる場合があります。

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

Permission denied: ○○

操作しようとしているファイルにアクセスできないというエラーです。
ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。

詳しい解説は、下記記事をご参考ください。

Worksheet ○○ does not exist

「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

最後に

openpyxlでセルに数式や関数を書き込みする方法を解説いたしました。

  • 「’=B1’」のように記述する
  • 「’=B2+C2’」のように計算もできる
  • 関数も書き込みできる

ぜひご活用ください。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました