「openpyxl」で、Excel関数を使ったPythonプログラムを作ってみる

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。
「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。
前回からChapter2-4「Excelシート自動生成のアイデア」に入り、データの自動生成の基本的な部分を学びました。
今回は、Excelの機能のひとつ、数式と組み合わせて使う方法について学びます。
Excelに関数を埋め込む方法
前回はPythonを使っての作業でしたが、今回はExcelの関数「TEXT」を利用して和暦変換を行います。
P.59
実際に西暦和暦対応表を作る前に、数式をExcelファイルに埋め込む簡単なプログラムを作って動作を確認してみましょう。 数式を埋め込む場合には、値を直接指定するのではなく、”=計算式”のように、”=”から始まる値を指定します。以下のプログラムは、セル「A1」に書き込んだ西暦を、和暦に変換してセル「B2」に表示するものです。和暦の変換には、ExcelのTEXT関数を利用します。
import openpyxl as excel
# ワークブック
book = excel.Workbook()
sheet = book.active
# A1のセルに日付を設定 --- (*1)
sheet["A1"] = "2023/01/01"
# B1のセルに計算式を設定 --- (*2)
sheet["B1"] = '=TEXT(A1,"ggge年m月d日")'
# ワークブックを保存
book.save("susiki.xlsx")
これを実行して出力されたのがこちらのExcelファイルです。

2にはTEXT関数で使う形式を用いて書かれていますが、B2の関数を確認してみると確かにそのまま書かれていることが分かります。
ちなみに「ggge」は西暦から和暦に変換する時に利用するコードです。
TEXT関数は曜日などにも変換ができます。日付に関するものは以下が挙げられます。
(表示例元の日付:2025年2月1日)
単位 | 表示形式 | 例 |
月 | mm | 2 |
日 | dd | 1 |
曜日1 | aaa | 土 |
曜日2 | aaaa | 土曜日 |
曜日3 | (aaa) | (土) |
西暦→和暦1 | ggge | 令和7年 |
西暦→和暦2 | ge | R7 |
より詳細な変換コードを知りたい方は、セルの書式設定の表示形式タブからご覧頂くか、以下のURLをご参照ください。
Excel関数×Pythonで西暦和暦対応表を作ってみよう。
Pythonプログラム内に該当のセルへ値を設定する際、「”=”」と書けばExcelで計算式として計算されることが分かりました。
次に、この方法を利用して西暦対応表生成プログラムを作ってみるようです。
P.60
以下が、書き換えたプログラムです。Pythonで記述した西暦和暦の変換処理がなくなり、代わりにTEXT関数を使った式をセルに設定します。
import openpyxl as excel
# 新規ワークブックを作ってシートを得る
book = excel.Workbook()
sheet = book.active
# ワークシートのヘッダ部分に説明を入れる --- (*1)
sheet["A1"] = "西暦"
sheet["B1"] = "和暦"
# 100年分の西暦和暦の対応表を作る --- (*2)
start_y = 1930
for i in range(100):
# 西暦と和暦への計算式を設定 --- (*3)
sei = str(start_y + i)
wa = '=TEXT("{}/1/1","ggge年")'.format(sei)
# ワークシートに設定
sheet.cell(row=(2+i), column=1, value=sei+'年')
sheet.cell(row=(2+i), column=2, value=wa)
print(sei, "=", wa)
# ファイルを保存
book.save("wareki2.xlsx")
そして出力されたのがこちらのファイルです。

まず西暦の部分は、繰り返し処理で、1930年から始まり、1を足していくことで作られて、A2以降のセルに文字列として入力されています。そして、和暦の部分は、formatメソッドを使い、{}に西暦の値(sei)を入力されるようになっていました。
そのため、B列に入っている数式は上で出てきたサンプルのA1を参照する形ではなく、日付をそのまま計算式内に記述しています。なので、ExcelファイルのA列の値を直接変更しても、B列の値は、上で出ているサンプルとは違って、自動で変換されることはありません。
それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。
Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。