こんにちは、ショウです。
これまでの記事では、天気予報アプリやAmazon価格監視ツールなど、Web上のデータを扱う方法を紹介してきました。
でも、皆さんが普段一番パソコンで触っているソフトって、Webブラウザ以外だと**「Excel(エクセル)」**ではありませんか?
- 毎日届く売上データを、マスターファイルにコピペする
- 数百行あるリストの計算をして、特定の色を塗る
- 請求書ファイルのファイル名を一つずつ変更する
「これ、ロボットがやってくれないかな…」と思ったことがある方。
それ、Pythonなら一瞬です。
今回は、Pythonを使って**「Excel作業を全自動化する第一歩」**を踏み出してみましょう。これができるようになると、本業の残業が減るだけでなく、ココナラなどで「Excelマクロ・自動化案件」を受けられるようにもなりますよ!
1. なぜVBA(マクロ)ではなくPythonなのか?
Excelの自動化といえば「VBA(マクロ)」が有名ですが、私は断然Pythonをおすすめします。
- 書きやすい: VBA独特の古い記述より、Pythonの方がシンプルで読みやすいです。
- Excel以外とも連携できる: 「Webからデータを取ってきてExcelに貼る」「Excelの内容をLINEに送る」といった連携はPythonの得意技です。
- 汎用性が高い: 覚えたスキルは、そのままAI開発やWebアプリ開発に応用できます。
2. 事前準備:ライブラリのインストール
PythonでExcelを操作するための最強ライブラリ**「openpyxl(オープンパイクセル)」**を使います。
黒い画面(ターミナル/コマンドプロンプト)で以下のコマンドを入力してください。
Bash
pip install openpyxl
3. 今回やること:「売上リストの計算と装飾」を自動化
練習として、以下のような単純作業をPythonにやらせてみます。
【元データ (sales.xlsx)】
商品名と単価、個数だけが入っているリストがあります。
| A列 (商品名) | B列 (単価) | C列 (個数) | D列 (合計) |
| りんご | 100 | 5 | (空欄) |
| みかん | 50 | 10 | (空欄) |
| バナナ | 200 | 3 | (空欄) |
【やりたい処理】
- D列に「単価 × 個数」の合計金額を計算して入れる。
- 合計金額が「1000円」を超えたら、文字を**「赤色の太字」**にする。
- 別名(sales_done.xlsx)で保存する。
これを手作業でやると面倒ですが、Pythonなら一瞬です。
4. 実装コード
まずは、テスト用のExcelファイル(sales.xlsx)がないと始まらないので、**「テスト用Excelを作るプログラム」と「自動処理するプログラム」**の2つを用意しました。
手順①:テストデータを作る
以下のコードをコピーして create_data.py として保存し、実行してください。
(すでに手元にExcelファイルがある人は飛ばしてもOKですが、練習のために実行することをおすすめします)
Python
import openpyxl
# 新しいExcelブックを作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "売上リスト"
# ヘッダーを作成
ws.append(["商品名", "単価", "個数", "合計金額"])
# データを追加
data = [
["りんご", 100, 5],
["みかん", 50, 20], # 合計1000
["バナナ", 200, 3],
["ぶどう", 500, 3], # 合計1500(1000超え)
["メロン", 3000, 1] # 合計3000(1000超え)
]
for row in data:
ws.append(row)
# 保存
wb.save("sales.xlsx")
print("テスト用ファイル(sales.xlsx)を作成しました!")
実行すると、同じフォルダに sales.xlsx が生成されます。
手順②:自動化処理を実行する
ここが本番です。excel_automation.py という名前で保存して実行してください。
Python
import openpyxl
from openpyxl.styles import Font, PatternFill
# 1. ファイルを読み込む
file_name = "sales.xlsx"
wb = openpyxl.load_workbook(file_name)
ws = wb.active # アクティブなシート(一番手前のシート)を選択
# 2. データを1行ずつ見ていく (2行目から最終行まで)
# iter_rowsを使うと、指定した範囲の行を順番に取ってこれます
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
# A列=0, B列=1, C列=2, D列=3 というインデックスになります
item_name = row[0].value # 商品名
price = row[1].value # 単価
count = row[2].value # 個数
# 計算処理:単価 × 個数
total = price * count
# 計算結果をD列(4列目)に書き込む
# row[3] はD列のセルを指します
row[3].value = total
# 3. 条件付き書式(装飾)の設定
if total >= 1000:
# 1000円以上なら「赤色の太字」にする
row[3].font = Font(color="FF0000", bold=True)
print(f"{item_name} は {total}円 なので強調しました。")
# 4. 別名で保存する
output_file = "sales_done.xlsx"
wb.save(output_file)
print(f"処理完了! {output_file} を確認してください。")
5. 実行結果を確認しよう
プログラムを実行した後、新しくできた sales_done.xlsx を開いてみてください。
- D列に計算結果が入っているはずです。
- 「みかん(1000円)」「ぶどう(1500円)」「メロン(3000円)」の数字が、赤色の太字になっていれば大成功!
たったこれだけのコードで、「読み込み・計算・判断・書式設定・保存」がすべて完了しました。
6. 応用:これが何の役に立つ?
「たった5行なら手でやったほうが早くない?」と思いましたか?
確かに5行ならそうです。でも、これが**「毎日届く1万行のファイル」**だったらどうでしょう?
Pythonを使えば、行数がどれだけ増えても処理時間は数秒です。
実際の活用シーン:
- 請求書作成: 取引先ごとのシートを作成し、PDF化してメールで送る。
- 勤怠管理: 全社員の出退勤ファイルを読み込み、残業時間を自動集計する。
- Web情報収集: スクレイピングした株価や商品情報を、毎日Excelに追記していく。
まとめ
今回はPythonを使った「Excel自動化」の基礎を紹介しました。
Webアプリを作るのも楽しいですが、Excel操作のような**「目の前の面倒な作業」**を解決できることこそ、プログラミングの最大のメリットかもしれません。
「この作業、毎月やっててしんどいな…」というExcelファイルがあれば、ぜひPythonに任せることに挑戦してみてください。驚くほど時間が余るようになりますよ!
あわせて読みたい記事:
編集後記
ちなみに、クラウドソーシングサイトでは「Excelデータを指定のフォーマットに変換するツール作成」といった案件が、5,000円〜数万円で募集されています。
今回のコードに「複数のファイルを結合する処理」を加えれば、それだけで副業案件に対応できるレベルになっちゃいます。夢がありますよね!
