Python と openpyxl を用いれば、Excel ワークブック内に数式(関数)を自在に書き込めます。本記事では 合計行の自動作成 から 月跨ぎの VLOOKUP、Translator を用いた数式コピー まで、代表的な 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 から高速に自動化できます。ぜひご自身の業務シナリオへ応用してみてください。