PythonとopenpyxlでExcel作業を自動化!Cellオブジェクトの基本から実践的な使い方まで徹底解説

openpyxl

「毎日繰り返されるExcelのコピペ作業、どうにか自動化できないだろうか…」

もしあなたがそう考えているなら、Pythonのopenpyxlライブラリがその強力な解決策になります。そして、Excel自動化の核となるのが、個々のセルを操作するための**Cellオブジェクト**です。

この記事では、openpyxlを使ったExcel作業自動化の第一歩としてCellオブジェクトに焦点を当て、基本的な値の読み書きから、フォントや塗りつぶしといった応用的なスタイル設定まで、初心者の方にも分かりやすく徹底解説します。

この記事を読み終えれば、あなたはCellオブジェクトを使いこなし、面倒なExcel作業をPythonに任せるための確かな一歩を踏み出せるでしょう。

はじめに:openpyxlのCellオブジェクトとは?

Cellオブジェクトは、Excelワークシート内の個々のセルを表すものです。

openpyxlでは、このCellオブジェクトを通じて、特定のセルの値を取得したり、新しい値を書き込んだり、文字の色や大きさを変えたりといった、あらゆる操作を行います。つまり、ExcelのセルをPythonで操作するための「リモコン」のような存在だと考えてください。

準備:openpyxlのインストールとExcelファイルの準備

まずは、openpyxlをインストールし、操作対象のExcelファイルを準備します。

openpyxlのインストール

openpyxlはPythonの外部ライブラリなので、pipコマンドでインストールが必要です。ターミナルやコマンドプロンプトで以下のコマンドを実行してください(Bash)。

pip install openpyxl

サンプルExcelファイルの準備

この記事の説明用に、sample.xlsxという名前の簡単なExcelファイルを手動で作成しておきましょう。A1セルに「こんにちは」、B2セルに「世界」と入力しておいてください。

Cellオブジェクトを取得する2つの基本パターン

Cellオブジェクトを取得するには、主に2つの方法があります。どちらも同じセルを指しますが、状況によって使い分けると便利です。

A1形式(例: ‘A1’)でセルを取得する

これが最も直感的で分かりやすい方法です。ワークシートオブジェクトに対して、'A1''B2'のように直接セル番地を指定します。

import openpyxl

# ワークブックを読み込む
wb = openpyxl.load_workbook('sample.xlsx')

# アクティブなワークシートを取得
ws = wb.active

# A1セルを取得
cell_a1 = ws['A1']

print(f'取得したセルの座標: {cell_a1.coordinate}')
print(f'A1セルの値: {cell_a1.value}')

実行結果:

取得したセルの座標: A1
A1セルの値: こんにちはCode language: HTTP (http)

行番号と列番号でセルを取得する (worksheet.cell())

もう一つの方法は、worksheet.cell()メソッドを使う方法です。行番号と列番号を数値で指定するため、forループなどでセルを順番に処理したい場合に非常に役立ちます。

注意点として、行番号・列番号は1から始まります。

import openpyxl

# ワークブックを読み込む
wb = openpyxl.load_workbook('sample.xlsx')

# アクティブなワークシートを取得
ws = wb.active

# 2行目、2列目(B2セル)を取得
cell_b2 = ws.cell(row=2, column=2)

print(f'取得したセルの座標: {cell_b2.coordinate}')
print(f'B2セルの値: {cell_b2.value}')

実行結果:

取得したセルの座標: B2
B2セルの値: 世界Code language: HTTP (http)

Cellオブジェクトの必須操作【値の読み書き】

Cellオブジェクトを取得できたら、次は最も基本的な操作である値の読み書きです。

セルの値を取得する (cell.value)

Cellオブジェクトの.value属性にアクセスすることで、セルの値を簡単に取得できます。

# ... (前述のコードの続き)

# A1セルの値を取得して表示
val_a1 = ws['A1'].value
print(f'A1セルの値は "{val_a1}" です。')

# B2セルの値を取得して表示
val_b2 = ws.cell(row=2, column=2).value
print(f'B2セルの値は "{val_b2}" です。')

セルに値を書き込む (cell.value = "新しい値")

値の書き込みも非常に簡単です。.value属性に新しい値を代入するだけです。数値、文字列、日付など、様々なデータを書き込めます。

import openpyxl

wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active

# C3セルに新しい値を書き込む
ws['C3'].value = 'Pythonから書き込み'

# D4セル(4行目、4列目)に数値を書き込む
ws.cell(row=4, column=4).value = 12345

# 変更を保存
wb.save('sample_modified.xlsx')

print('C3セルとD4セルに値を書き込み、sample_modified.xlsxとして保存しました。')

このコードを実行すると、sample_modified.xlsxという新しいファイルが作成され、C3セルとD4セルに値が書き込まれているはずです。

知っていると便利!Cellオブジェクトの主要な属性

Cellオブジェクトは.value以外にも便利な属性を持っています。

行番号を取得する (cell.row)

セルの行番号を数値で取得します。

列番号を取得する (cell.column)

セルの列番号を数値で取得します。(A列が1, B列が2, …)

座標を取得する (cell.coordinate)

セルの座標を’A1’のような形式の文字列で取得します。

# ... (前述のコードの続き)

cell = ws['B2']

print(f'値: {cell.value}')
print(f'行番号: {cell.row}')
print(f'列番号: {cell.column}')
print(f'座標: {cell.coordinate}')

実行結果:

: 世界
行番号: 2
列番号: 2
座標: B2Code language: HTTP (http)

【応用編】Cellのスタイルを自由自在に変更する

openpyxlを使えば、値の操作だけでなく、セルの見た目(スタイル)も変更できます。スタイルの変更には、openpyxl.stylesモジュールから必要なクラスをインポートして使います。

フォントを変更する(太字、色、サイズなど)

Fontクラスを使って、文字のスタイルを設定します。

from openpyxl.styles import Font

# ... (中略) ...

cell = ws['A1']

# フォントスタイルを作成
# 太字、サイズ16、赤色(ARGB形式)
font_style = Font(bold=True, size=16, color="FF0000")

# セルにスタイルを適用
cell.font = font_style

wb.save('sample_styled.xlsx')

背景色(塗りつぶし)を設定する

PatternFillクラスを使って、セルの背景色を設定します。

from openpyxl.styles import PatternFill

# ... (中略) ...

cell = ws['B2']

# 塗りつぶしスタイルを作成
# 黄色でベタ塗り
fill_style = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

# セルにスタイルを適用
cell.fill = fill_style

wb.save('sample_styled.xlsx')

罫線を引く

BorderSideクラスを使って、セルの四方に罫線を引きます。

from openpyxl.styles import Border, Side

# ... (中略) ...

cell = ws['C3']
ws['C3'].value = "罫線テスト" # 値を入れておく

# 罫線のスタイル(細い実線)
thin_border_side = Side(style='thin')

# 罫線オブジェクトを作成(上下左右に同じスタイルを適用)
border_style = Border(top=thin_border_side, bottom=thin_border_side, left=thin_border_side, right=thin_border_side)

# セルにスタイルを適用
cell.border = border_style

wb.save('sample_styled.xlsx')

sample_styled.xlsxを開くと、A1、B2、C3セルのスタイルが変更されていることが確認できます。

まとめ

今回は、PythonのopenpyxlライブラリにおけるCellオブジェクトの操作方法について、基本から応用までを解説しました。

  • CellオブジェクトはExcelの個々のセルを表す
  • 取得方法はws['A1']ws.cell(row=1, column=1)の2種類
  • 値の読み書きは.value属性で行う
  • .row, .column, .coordinateでセルの位置情報を取得できる
  • openpyxl.stylesを使えばフォントや色、罫線などのスタイルも変更可能

Cellオブジェクトの操作は、openpyxlによるExcel自動化の基本中の基本です。この知識を土台として、ぜひ日々の定型的なExcel業務の自動化に挑戦してみてください!

コメント

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