Pythonとopenpyxlで既存Excelファイルのデータを更新する

この記事では、Pythonのopenpyxlライブラリを使い、既存のExcelスプレッドシートを読み込み、特定の条件に基いてセルの値を更新し、その結果を新しいファイルとして保存するという、実用的なデータ更新タスクの自動化について解説します。


目次

1. 準備:更新対象のExcelファイルと更新データ

まず、product_list.xlsxという名前で、以下のようなデータがSheet1に入力されているExcelファイルを準備します。

ABC
1ProductIDProductNamePrice
2P001Apple120
3P002Banana80
4P003Cherry300
5P004Orange100

次に、Pythonスクリプト側で、更新したい商品の新しい価格を辞書として定義します。

# 更新する価格のデータ
# {'商品名': 新価格}
PRICE_REVISIONS = {
    'Apple': 150,
    'Orange': 90
}

2. Excelシートを走査し、価格を更新する

プログラムの主処理として、product_list.xlsxファイルを読み込み、その行を一つずつ調べていきます。もしB列の商品名が、先ほど定義したPRICE_REVISIONS辞書のキーに存在すれば、その行のC列の価格を新しい価格で上書きします。

import openpyxl

# ワークブックとシートを読み込む
workbook = openpyxl.load_workbook("product_list.xlsx")
sheet = workbook['Sheet1'] # モダンな構文でシートを取得

# 2行目から最終行までループして価格を更新
# min_row=2でヘッダー行をスキップ
for row_num in range(2, sheet.max_row + 1):
    # B列から商品名を取得
    product_name_cell = sheet.cell(row=row_num, column=2)
    product_name = product_name_cell.value

    # 商品名が更新リストにあれば、価格を更新
    if product_name in PRICE_REVISIONS:
        # C列の価格セルを新しい価格で上書き
        price_cell = sheet.cell(row=row_num, column=3)
        price_cell.value = PRICE_REVISIONS[product_name]

3. 更新結果を新しいファイルに保存する

すべての行のチェックと更新が終わったら、変更をworkbookオブジェクトに加えた状態で、save()メソッドを使って新しいファイルに保存します。元のファイルを上書きしないように、別のファイル名(例: updated_product_list.xlsx)で保存するのが安全です。

# 変更を新しいファイルに保存
workbook.save("updated_product_list_v2.xlsx")
print("価格の更新が完了し、新しいファイルに保存しました。")

このスクリプトを実行すると、updated_product_list_v2.xlsxというファイルが作成され、その中ではAppleの価格が150に、Orangeの価格が90に更新されています。


4. 完成したコード全体

以下に、これまでのステップをすべて統合した完全なスクリプトを示します。

import openpyxl

# 1. 更新用データを定義
PRICE_REVISIONS = {
    'Apple': 150,
    'Orange': 90
}

# 2. 既存のExcelブックを読み込む
try:
    workbook = openpyxl.load_workbook("product_list.xlsx")
    sheet = workbook['Sheet1']
except FileNotFoundError:
    print("エラー: product_list.xlsxが見つかりません。")
    exit()

# 3. シートを一行ずつ走査し、該当する商品の価格を更新
# ヘッダー行をスキップするために2行目から開始
for row_num in range(2, sheet.max_row + 1):
    product_name = sheet.cell(row=row_num, column=2).value
    if product_name in PRICE_REVISIONS:
        sheet.cell(row=row_num, column=3).value = PRICE_REVISIONS[product_name]

# 4. 変更を新しいファイルに保存
try:
    workbook.save("updated_product_list_v2.xlsx")
    print("価格の更新が完了し、'updated_product_list_v2.xlsx'に保存しました。")
except Exception as e:
    print(f"ファイルの保存中にエラーが発生しました: {e}")

まとめ

openpyxlを使えば、既存のExcelファイルを読み込み、プログラムで内容を動的に変更し、結果を保存するという一連の処理を自動化できます。辞書などのデータ構造と組み合わせることで、定期的な価格改定や在庫情報の更新といった、手作業では時間のかかる定型業務を効率化することが可能です。

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

この記事を書いた人

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

目次