Python 業務自動化 | Excel業務自動化:Excel基本操作 - 列追加

Python Python
スポンサーリンク

列追加は「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 側に計算を任せられる
  • 条件判定列(フラグ列)はデータ加工でよく使う
  • テンプレートに列を追加すると帳票自動化が一気に進む

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