【業務自動化】Chapter1-4|Excelシートにデータを書き込もう

ながみえ

一つ前のページでは シートからデータを読み込む方法 について学習しました。

今回は シートにデータを書き込む方法 について見ていきましょう。

Chapter1:PythonでExcelを操作しよう
 ・Chapter1-1:openpyxlとは何か|インストールと動作確認
 ・Chapter1-2:PythonでExcelファイルを作成しよう
 ・Chapter1-3:Excelシートからデータを読み込もう
 ・Chapter1-4:Excelシートにデータを書き込もう ◁今回はここ
 ・Chapter1-5:データを新規シートへ自動振り分けしよう
 ・Chapter1-6:簡単なExcel自動化を体験しよう
Chapter2:PyInstallerで自動化ツール(.exe)を作ろう
Chapter3:便利な自動化ツールを5つ作ろう
Chapter4:Webスクレイピング入門
Chapter5:自動化ツールを作って稼ごう

前回の記事では、Excel シートから既存のデータを読み取る方法を学びました。

今回はさらに一歩進めて、Excelシートに新しいデータを書き込む方法を学びます。

単にデータを読み込むだけでなく、条件に応じて新しい情報を計算し、自動的にセルへ書き込めるようになると、日々の作業効率は大きく向上します。

あわせて読みたい
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】

<<前のページ

業務自動化の記事一覧

次のページ>>

Excelにデータを書き込む方法|セル指定と保存の基本

Excel のシートに新しい値を入力する作業は簡単に実現できます。

cell()メソッド でセルを指定して値を代入し、最後に saveメソッド でファイルを保存するだけで、Excel 上に結果が反映されます。

今回は年齢データをもとに「未成年」「成人」「シニア」といった区分を自動的に書き込む方法を学んでいきましょう。

前回使用したExcel資料「chapter1-3.xlsx」を引き続き使用します。

資料がない方は↓↓のダウンロードリンクからファイルをダウンロードし、workbooksフォルダ内に保存してください。

Q
Excelファイルの保存場所(workbooksフォルダ)について

ダウンロードしたExcelファイルは以下の階層になるように保存して下さい。

この理由については、Chapter1-2 の記事で詳しく解説しています。

業務自動化学習/					  # 学習フォルダ
 ├── Chap1/						 # チャプター1の保存フォルダ
 │   ├── Chapter1-1.py
 │   ├── Chapter1-2.py
 │   ├── ・・・
 │   └── workbooks/				# チャプター1のエクセルファイルの保存フォルダ
 │       ├── sample1-1.xlsx 
 │       ├── sample2-1.xlsx
 │       ├── ・・・
 │
 ├── Chap2/						 # チャプター2の保存フォルダ
 │   ├── Chapter2-1.py
 │   ├── ・・・
 │   └── workbooks/				# チャプター2のエクセルファイルの保存フォルダ
 │       ├── ・・・
【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

Excelファイルに書き込む方法|サンプルコードの紹介

以下のコードでは、Excel ファイルから年齢データを読み取り、条件に応じて「未成年」「成人」「シニア」という区分を自動で判定し、その結果を新しい列に書き込みます。

最後にファイルを保存することで、Excel 上で確認できるようになります。

import openpyxl, pathlib    # openpyxlとpathlibのインポート
file_path = pathlib.Path(__file__).parent / "workbooks" # エクセルファイルの保存フォルダの相対パスを作成

book = openpyxl.load_workbook(file_path / "Chapter1-3.xlsx") # ワークブックの読み込み
sheet = book.active 	# アクティブなシートを取得

START_ROW_NO = 3        # データ入力を開始する行
AGE_COL_NO = 4          # 年齢の列
CATEGORY_COL_NO = 5     # 年齢区分の列
max_row = sheet.max_row

for row_no in range(START_ROW_NO, max_row+1):
    age = sheet.cell(row_no, AGE_COL_NO).value
    category = ""   # 空の変数を作成
    if age < 20:
        category = "未成年"
    elif 20 <= age <= 60:
        category = "成人"
    else:
        category = "シニア"
    sheet.cell(row_no, CATEGORY_COL_NO).value = category    # セルにデータの書き込み

book.save(file_path / "Chapter1-4.xlsx")

このコードを実行すると、chapter1-3.xlsx内の空欄部分(年齢区分)が埋められた新規ブックchapter1-4.xlsxが作成されます。

コードを実行して新しいブックを開き、結果を確認して下さい。

サンプルコードの解説|セル参照・条件分岐・保存の流れ

このコードの流れを順番に確認してみましょう。

ライブラリの準備とExcelファイルの読み込み|load_workbook関数

import openpyxl, pathlib    # openpyxlとpathlibのインポート
file_path = pathlib.Path(__file__).parent / "workbooks" # エクセルファイルの保存フォルダの相対パスを作成

book = openpyxl.load_workbook(file_path / "Chapter1-3.xlsx") # ワークブックの読み込み
sheet = book.active # アクティブなシートを取得

この部分は過去のチャプターで学習したコードと同一です。

必要なライブラリのインポート、ワークブックの保存場所のパス作成、そして実際にワークブックを開く処理をしています。

この部分に分からないところがある人は、Chapter1-2 の記事に戻って復習しましょう。

データ処理の開始位置と列番号を設定

START_ROW_NO = 3        # データ入力を開始する行
AGE_COL_NO = 4          # 年齢の列
CATEGORY_COL_NO = 5     # 年齢区分の列
max_row = sheet.max_row

この部分では、Excel シートを処理するときに必要となる「基準」と「範囲」を決めています。

  • START_ROW_NO = 3 :データの処理をどの行から始めるかを指定
  • AGE_COL_NO = 4 :年齢が入力されている列を指定
  • CATEGORY_COL_NO = 5 :処理結果である「年齢区分」を書き込む列を指定

最後の max_row = sheet.max_row という行では、シートに入力されているデータの最終行の番号を取得しています。

これによって、シートに何行データが入っていても、その最後の行まで自動的に処理を繰り返すことができるようになります。

こうして、どの範囲を対象にして処理を行うのかをあらかじめ定義しているのです。

年齢データを判定して区分をセルに書き込む

for row_no in range(START_ROW_NO, max_row+1):
    age = sheet.cell(row_no, AGE_COL_NO).value
    category = ""   # 空の変数を作成
    if age < 20:
        category = "未成年"
    elif 20 <= age <= 60:
        category = "成人"
    else:
        category = "シニア"
    sheet.cell(row_no, CATEGORY_COL_NO).value = category    # セルにデータの書き込み

ここからがプログラムの本番で、実際にシートのデータを読み取り、条件に応じた判定を行っています。

for文の行で指定した開始行から最終行までを順番に処理するループを作り、Excel の各行を一つずつ処理できるようになります。

次に age = ... の行で cellメソッドとvalueプロパティ を用いてその行の年齢データを取得し、その後if文で年齢区分を判定 ⇒ 結果を変数categoryに代入。

最後にまた cellメソッドとvalueプロパティ を使って、判定結果を対応するセルに書き込んでいます。

以上の動作により、元の年齢データの横に新しい列が作られ、そこに「未成年」「成人」「シニア」といった文字が自動的に入力される仕組みになっています。

結果を新しいファイルとして保存|saveメソッド

book.save(file_path / "Chapter1-4.xlsx")

プログラムの最後では、処理した結果を保存する必要があります。

この一行のおかげで、処理した結果を実際に Excel 上で確認できるようになります。

プログラムの最後に必ず保存処理を入れておくのが、Excel 自動化の基本的な流れです。

まとめ|Excelへの書き込みで押さえる基本

この記事では、Python と openpyxl を使って Excel シートに新しいデータを書き込む方法を学びました。

ポイントは次の通りです。

  • sheet.cell(row, col).value で、特定のセルに値を代入
  • book.save() でファイルを保存

これで、単なる読み取りだけでなく「Excel ファイルにデータを書き込む」スキルを身につけられました。

次回はさらに応用し、大量のコピー&ペーストの自動化に挑戦していきましょう。

練習問題|Excelへのデータの書き込みを体験しよう

今回学習した内容を復習する練習問題に挑戦しましょう。

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

問題|新しいExcelブックを作成して書き込み、出力しよう

新規にExcelファイルを作成し、シートにデータを書き込んで保存したあと、その内容を取得して画面に出力するプログラムを作成してください。

以下の要件に従ってコードを完成させて下さい。

  • 新規ブックを作成し、シート名を変更すること(.titleプロパティで指定)
    例:sheet.title = “練習問題1-4”
  • cell() メソッドを用いて、複数のセルにデータを書き込むこと
  • 作成したExcelファイルを、training1-4.xlsxという名前で保存すること
  • 保存した内容をシートから読み取り、printで出力すること

ヒント|コードの構成と穴埋め問題化

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント① コードの構成を見る

正解のコードは上から順に以下のような構成となっています。

1.ライブラリの読み込みとファイル保存先の指定
 ・Excelを操作するために使うライブラリを準備する
 ・フォルダやファイルの場所を扱いやすくするために道具を使う
 ・保存先のパスを変数に入れておく

2.新しいExcelブックとシートの準備
 ・新しいExcelファイルを作る(Workbook()クラスをインスタンス生成)
 ・最初に用意されているシートを取り出す(.activeプロパティを使用)
 ・シートに名前をつける(.titleプロパティを使用)

3.セルにデータを書き込む
 ・セルの場所は行番号と列番号で決める
 ・sheet.cell(row, column, value=値)

4.Excelファイルを保存する
 ・保存するには「ブックを保存する命令」を使う
 ・保存場所とファイル名を指定する
 ・拡張子は .xlsx にする

5.シートからデータを読み取り出力する
 ・行と列を順番に調べる
 ・セルの中身を取り出す命令を使う
 ・取り出した値を画面に表示する

Q
ヒント② 穴埋め問題にする

以下のコードをコピーし、穴埋め部に適切なコードを書きこんで下さい。

import '''(穴埋め)''', pathlib
file_path = pathlib.Path(__file__).parent / "workbooks"

# --- ① 新規ブックを作成 ---
'''(穴埋め)新しいブックを作成する処理を書く '''

sheet = new_book.active
 '''(穴埋め)シートのタイトルを指定する'''

# --- ② データを書き込み ---
sheet.cell(row=1, column=1, value="こんにちは、openpyxl!")
sheet.cell(row=1, column=2, value=123)
sheet.cell(row=1, column=3, value="学習中")

# ファイル保存
new_book.save(file_path / "training1-4.xlsx")

# --- ③ 書き込んだ内容を読み込み ---
for row_no in range(sheet.min_row, sheet.max_row + 1):
    ''' (穴埋め)列を順番に処理するループを書く '''
    value = sheet.cell(row_no, col_no).value
    print(value)

正解コードと詳細解説

例えば以下のようなプログラムが考えられます。

Q
正解コード例
import openpyxl, pathlib
file_path = pathlib.Path(__file__).parent / "workbooks"

# --- ① 新規ブックを作成 ---
new_book = openpyxl.Workbook()
sheet = new_book.active
sheet.title = "練習問題1-4"

# --- ② データを書き込み ---
sheet.cell(row=1, column=1, value="こんにちは、openpyxl!")
sheet.cell(row=1, column=2, value=123)
sheet.cell(row=1, column=3, value="学習中")

# ファイル保存
new_book.save(file_path / "training1-4.xlsx")

# --- ③ 書き込んだ内容を読み込み ---
for row_no in range(sheet.min_row, sheet.max_row + 1):
    for col_no in range(sheet.min_column, sheet.max_column + 1):
        value = sheet.cell(row_no, col_no).value
        print(value)
Q
正解コードの解説

ライブラリの読み込みとファイル保存先の指定

import openpyxl, pathlib
file_path = pathlib.Path(__file__).parent / "workbooks"

Excelファイルを扱うために専用の道具を準備し、プログラムが保存する場所をあらかじめ決めています。
これによって、どこにファイルを作成するかを統一できるようになります。

新しいExcelブックとシートの準備

# --- ① 新規ブックを作成 ---
new_book = openpyxl.Workbook()
sheet = new_book.active
sheet.title = "練習問題1-4"

まっさらなExcelファイルを作り、その中で最初に使うシートを取り出し、そのシートにわかりやすい名前をつけています。

セルにデータを書き込む

# --- ② データを書き込み ---
sheet.cell(row=1, column=1, value="こんにちは、openpyxl!")
sheet.cell(row=1, column=2, value=123)
sheet.cell(row=1, column=3, value="学習中")

Excelの表の中に文字や数字を入れています。
行と列の番号を指定することで、どの場所にデータを置くかを決められます。
ここでは最初の行に3つのデータを並べて入力しています。

Excelファイルを保存する

# ファイル保存
new_book.save(file_path / "training1-4.xlsx")

作成したExcelに入力した内容を、パソコンのフォルダに保存しています。
これでファイルとして残り、あとから開いて確認したり再利用できるようになります。

シートからデータを読み取り出力する

# --- ③ 書き込んだ内容を読み込み ---
for row_no in range(sheet.min_row, sheet.max_row + 1):
    for col_no in range(sheet.min_column, sheet.max_column + 1):
        value = sheet.cell(row_no, col_no).value
        print(value)

保存したシートの中を順番に調べて、入っている値を取り出しています。
見つけたデータを画面に表示することで、実際に正しく書き込まれているかを確認できます。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいExcel自動化学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

業務自動化の記事一覧

次のページ>>

よくある質問(FAQ)|Excelシートにデータを書き込もう

Q1. 元データを壊したくありません。上書き保存ではなく「新規ファイルとして保存」する理由と運用のコツは?

本記事の手順では、読み取った元ブックとは別名で新しいブックを作成して保存しています。

これにより、処理結果を検証して問題があっても元データへ影響を与えません(例:入力は前章のブック、出力は本章のブックという分離)。

保存は処理の最後に行い、完成物だけを出力するのが安全です。

元ブックの所在は学習用の規定フォルダ(workbooks)にまとめ、入出力を明確に分けると管理しやすくなります。

Q2. 日本語ラベルや数値・日付を書き込むと、Excel上の見た目が想定と違うことがあります。データ型と表示形式の考え方は?

本章では条件に応じて文字列ラベルを新しい列へ書き込む例を扱っています。

Excelはセルの値(データ型)と表示形式の組み合わせで見た目が決まるため、数値や日付を書き込む場面では、Excel側の表示形式が想定どおりかも合わせて確認しましょう。

文字列ラベルはそのまま表示されますが、数値は小数点や桁区切り、日付は表示形式によって見え方が変わります。

見た目の揺れがある場合は、入力値の型が適切か、対象列が文字列扱いになっていないか、といった観点で点検すると原因を切り分けやすくなります。

Q3. 多くの行に書き込むときの注意点は?開始行の決め方、最終行まで回すコツ、欠損値や境界値の扱いは?

本章では「処理の開始行・対象列」を先に定義し、シートの最終行まで繰り返すという考え方を採っています。

開始行を固定しておくと見出し行を誤って上書きする事故を防ぎ、最終行はシートの最大行を基準に、上下端を含む範囲で回すのがポイントです。

欠損値や想定外の型が混ざる実務データでは、空欄行をそのまま書き換えない方針や、判定できない値に「未分類」を入れるといった防衛的なルールを決めておくと安定します。

年齢区分のように閾値の境界(例:20歳ちょうど)がある条件判定では、どちらに含めるかを明示し、処理対象列に結果だけを書き込む流れにすると、後工程の検証がしやすくなります。

最後に保存を忘れないことも基本です。

次のステップ:業務自動化を「実務レベル」まで引き上げたい方へ

このコース(Chapter1〜2)の無料教材では、Python と Excel(openpyxl)を使って「単純作業を自動化する」ための基本的な考え方やコードの書き方を身につけることができます。

ただ、実際の業務で使おうとすると、次のような壁にぶつかりがちです。

  • 社内で使える「ちゃんとしたツール」っぽい形にしたい
  • エラーが出たときに、自分で原因を特定して直せない
  • 副業したくても本当に正しく動くか自信がない

そこで、格安で販売中のChapter3以降では「現場でそのまま使える業務自動化スクリプト」を作りながら学べる構成としました。

そこでは、Chapter2までで学んだ内容を土台にしつつ、

  • 実務でよくあるパターン別のサンプルコード
  • トラブルシューティング(エラーの潰し方)の考え方
  • より高度な自動化を実現するWebスクレイピングの基本
  • 業務自動化スキルを用いて副業で稼ぐための具体的な方法

などを通して、「自分の職場に合わせてカスタマイズできる力」を身につけることを目指します。

教材は↓↓のリンクボタンの販売所で購入するとPDFやpyファイルでダウンロードできます。

もしくは、各学習記事内で会員登録して頂くと、そのままこのサイト内で全ての記事を読めるようになります。

どこよりも安く手実践的なこの教材を、是非ご活用下さい^^

<<前のページ

業務自動化の記事一覧

次のページ>>

記事URLをコピーしました