列追加は「Excelの表に新しい列を自動で挿入し、計算列・フラグ列・補助列を作る」ための重要テクニック
Excel業務自動化では、列を追加する処理が非常に多く登場します。
例えば次のような場面です。
- 売上データに「合計」「利益」「カテゴリ」などの列を追加したい
- 入力フォームに新しい項目を追加したい
- データ加工のための補助列を自動生成したい
- フラグ列(OK/NG、完了/未完了)を追加したい
Pythonでは openpyxl を使うことで、Excelに列を簡単に追加できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlで列を追加する基本(最も実務向け)
insert_cols() を使って列を挿入する
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws.insert_cols(2) # B列に新しい列を挿入
ws["B1"] = "新しい列"
wb.save("sample.xlsx")
Python深掘りポイント
insert_cols(2)は「2列目に新しい列を挿入」- 既存の列は右にずれる
- 列名(ヘッダー)を追加する場合は
ws["B1"] = "列名"のように書く - 表の途中に列を追加したいときに非常に便利
最後尾に列を追加する(右端に追加したい場合)
max_column を使って次の列番号を計算
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
next_col = ws.max_column + 1
ws.cell(row=1, column=next_col, value="追加列")
wb.save("sample.xlsx")
Python深掘りポイント
ws.max_columnは「現在の最終列」を返す- 右端に列を追加したいときに最適
- append() の列版のように使える
列全体に値を書き込む(追加した列を埋める)
追加した列にデータを流し込む
ws.insert_cols(3)
ws["C1"] = "カテゴリ"
data = ["A", "B", "A", "C", "B"]
for i, v in enumerate(data, start=2):
ws.cell(row=i, column=3, value=v)
Python深掘りポイント
- 列追加 → 値書き込み の流れは業務で非常に多い
- enumerate(start=2) で2行目から書き込む
- 行追加と違い、列追加は「縦方向の処理」が中心
数式列を追加する(Excel側に計算させる)
合計列を追加して SUM 関数を入れる
ws.insert_cols(4)
ws["D1"] = "合計"
for row in range(2, ws.max_row + 1):
ws[f"D{row}"] = f"=B{row}*C{row}"
Python深掘りポイント
- 数式は文字列として書き込むだけでOK
- Excelを開いたときに自動計算される
- 計算列を自動生成する業務で非常に便利
例題①:売上データに「合計」列を追加する
シナリオ
数量(B列)×単価(C列)で合計列を作りたい。
from openpyxl import load_workbook
wb = load_workbook("sales.xlsx")
ws = wb["売上"]
ws.insert_cols(4)
ws["D1"] = "合計"
for row in range(2, ws.max_row + 1):
ws[f"D{row}"] = f"=B{row}*C{row}"
wb.save("sales.xlsx")
Python深掘りポイント
- 計算列を自動生成する典型的なパターン
- Excelの計算式を使うため高速で確実
例題②:データに「フラグ」列を追加して条件判定する
シナリオ
金額が 1000 以上なら「OK」、それ以外は「NG」。
from openpyxl import load_workbook
wb = load_workbook("data.xlsx")
ws = wb["Sheet1"]
ws.insert_cols(3)
ws["C1"] = "フラグ"
for row in range(2, ws.max_row + 1):
value = ws[f"B{row}"].value
ws[f"C{row}"] = "OK" if value >= 1000 else "NG"
wb.save("data.xlsx")
Python深掘りポイント
- Python側で条件判定して書き込む
- データ加工の補助列として非常に便利
例題③:テンプレートに「日付」列を追加して自動入力する
シナリオ
明細表に日付列を追加したい。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("template.xlsx")
ws = wb["明細"]
ws.insert_cols(1)
ws["A1"] = "日付"
for row in range(2, ws.max_row + 1):
ws[f"A{row}"] = datetime.now()
wb.save("report.xlsx")
Python深掘りポイント
- 日付列を追加することで履歴管理がしやすくなる
- openpyxl は datetime を自動で Excel 日付として扱う
pathlib を使った読みやすい列追加コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.active
ws.insert_cols(2)
ws["B1"] = "追加列"
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
列追加を業務で設計するときの視点
- insert_cols() は「途中に列を挿入」する最も強力な方法
- max_column を使うと右端に列を追加できる
- 数式列を追加すると Excel 側に計算を任せられる
- 条件判定列(フラグ列)はデータ加工でよく使う
- テンプレートに列を追加すると帳票自動化が一気に進む
