openpyxl でセルに数式を設定・展開する 4 つの実用例

Python と openpyxl を用いれば、Excel ワークブック内に数式(関数)を自在に書き込めます。本記事では 合計行の自動作成 から 月跨ぎの VLOOKUPTranslator を用いた数式コピー まで、代表的な 4 パターンのコード例を丁寧に解説いたします。


目次

1. 固定範囲の合計を 1 行で書き込む

from openpyxl import load_workbook

wb_path = 'working_time.xlsx'
wb_report = load_workbook(wb_path)
ws_time = wb_report.active

# D2 セルへ合計式を設定
ws_time['D2'] = '=SUM(D4:D13)'

wb_report.save('working_time_updated.xlsx')
ポイント説明
'=SUM(D4:D13)'Excel と同じ書式で数式を文字列として代入します。
保存時のファイル名元ファイルを上書きせず、末尾に _updated を付けると安全です。

2. 前月シートを参照した VLOOKUP を自動入力

from openpyxl import load_workbook

wb = load_workbook('monthly_time.xlsx')

prev_sheet = '202504'
curr_sheet = '202505'

ws_prev = wb[prev_sheet]
ws_curr = wb[curr_sheet]

for row in ws_curr.iter_rows(min_row=2, max_row=ws_curr.max_row):
    r_idx = row[0].row
    # 列 E に VLOOKUP を設定
    row[4].value = (
        f'=VLOOKUP(B{r_idx},'
        f"'{prev_sheet}'!$B$2:$D$11,3,FALSE)"
    )

wb.save('monthly_time_updated.xlsx')
ポイント説明
シート名にシングルクォート月名が数字のみでも '...' で囲むと参照エラーを防げます。
行インデックスの自動反映f-string を使い B{r_idx} のように動的に組み込みます。

3. ワークシート間で同一構造の数式をコピー

from openpyxl import load_workbook
from openpyxl.formula.translate import Translator

wb = load_workbook('summary.xlsx')
ws_src = wb.active

# C3 の式を D3 用へ変換
ws_src['D3'] = Translator(ws_src['C3'].value,
                          origin='C3').translate_formula('D3')

wb.save('summary_updated.xlsx')
ポイント説明
Translator列・行をずらしても参照が正しく調整されるため、複数セルへ式を展開する際に便利です。

4. 縦方向に数式を一括展開(粗利計算の例)

from openpyxl import load_workbook
from openpyxl.formula.translate import Translator

wb = load_workbook('gross_profit.xlsx')
ws_profit = wb.active

template_cell = 'E6'
ws_profit[template_cell] = '=C6-B6'  # 粗利 = 売上 - 原価

# 7 行目以降に式をコピー
for r in range(7, ws_profit.max_row + 1):
    target_cell = f'E{r}'
    ws_profit[target_cell] = Translator(
        ws_profit[template_cell].value,
        origin=template_cell
    ).translate_formula(target_cell)

wb.save('gross_profit_updated.xlsx')
ポイント説明
テンプレート式まず 1 つのセルに式を設定し、それを基点(origin)として展開します。
ループ制御range(start, end + 1) で最終行まで自動化します。

まとめ

  • 固定範囲の合計 は文字列で直接代入。
  • シート跨ぎ VLOOKUP は f-string を活用し、シート名をシングルクォートで囲む。
  • Translator を用いると、数式を複数セルへ安全にコピーできる。

openpyxl と組み合わせることで、Excel 上の定型集計や月次転記を Python から高速に自動化できます。ぜひご自身の業務シナリオへ応用してみてください。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次