【Python】openpyxl:エクセルの背景色を変更する方法(セル・行列)
2021.10.14 /

本記事ではPythonのopenpyxlを利用した、エクセルのセルや行列の背景色を変更する方法について詳しく解説していきます。
エクセルを業務で利用している方は非常に多いです。このエクセル操作を自動化するためにopenpyxlはとても役に立ちます。
エクセル表のデータを理解しやすくするために、セルの背景色を変更しますが、そういった見た目のデザインもopenpyxlで実現することができます。
パソコンが背景色の変更といった操作を行うので、手作業で行うよりも圧倒的に早いです。
ぜひ本記事を参考にして、openpyxlでエクセルを見やすい表に変更してみてください。
openpyxlの基本的な使い方については以下記事をご参照ください。

【Python】openpyxl:基本的なエクセル操作方法を徹底解説
openpyxlのstyles
openpyxl.stylesはエクセルデータの見た目を変更することに使われます。openpyxl.stylesを使いこなすことで、エクセルの見た目を自由に変更することができます。
以下にopenpyxl.stylesで実現できることの一部を記します。
- セルの書式設定(フォント・サイズ・色・太字・下線)
- セルの背景色
- セルのアライメント(文字列の揃え位置)
- セルのボーダー
- セルの保護・解除
本記事ではopenpyxl.stylesを利用したセル・行列の背景色を変更する方法について解説します。
セルの書式設定(フォント・サイズ・色・太字)の変更については以下記事をご参照ください。書式設定にはopenpyxl.styles.Fontを利用します。

【Python/openpyxl】エクセル:セルの書式設定(フォント・サイズ・色・太字)を変更
エクセルやセルの保護については以下記事をご参照ください。セルの保護にはopenpyxl.styles.Protectionを利用します。

【Python/openpyxl】エクセル:ブックやシート・セルを保護・解除する方法
セルの背景色を変更する方法
セルの背景色を変更するには、PatternFillオブジェクトを使用します。
以下の流れでPatternFillオブジェクトを生成し、セルの背景色を変更します。
- openpyxl.stylesからPatternFill()関数をインポートする
- PatternFill()関数を使用してPatternFillオブジェクトを生成する
- Cellオブジェクトのfill属性にPatternFillオブジェクトを代入する
それぞれの手順について詳しく解説していきます。
1.openpyxl.stylesからPatternFill()関数をインポートする
openpyxl.stylesからセルの背景色を変更できる関数、PatternFill()関数をインポートします。
スクリプトの先頭で次のように記述します。
from openpyxl.styles import PatternFill
上記のようにインポートしなくてもopenpyxlさえインポートされていれば、openpyxl.styles.PatternFill()とすべて書くことで利用することはできます。
ただ書く労力を少なくするために、上記のようにPatternFill()関数をインポートしています。
2.PatternFill()関数を使用してPatternFillオブジェクトを生成する
次にPatternFillオブジェクトを生成します。そのためにインポートしたPatternFill()関数を利用します。
PatternFill()関数は次のような構文になっています。
PatternFill(ParternType=None, fgColor=Color(), bgColor=Color, fill_type=None, start_color=None, end_color=None)
引数で背景色の色やパターンを指定します。ここで指定した背景情報がセルに適応されます。
ほとんどの場合、引数にはPatternType=”solid”とfgColorで色を指定するのみです
引数のPatterTypeとfill_typeには以下のパターンを指定することができます。
none, solid, darkDown, lightDown, darkVertical, lightVertical, darkGray, lightGray, mediumGray, darkGrid, lightGrid, gray0625, gray125, darkTrellis, lightHorizontal, darkHorizontal, lightUp, darkUp
PatternFill()関数で作成したPatternFillオブジェクトは変数に代入して利用します。
fill = PatternFill(patternType="solid", fgColor="ff3333")
この変数を使って、Cellオブジェクトの背景設定を変更します。
3.Cellオブジェクトのfill属性にPatternFillオブジェクトを代入する
PatternFillオブジェクトが代入された変数をCellオブジェクトのfill属性に代入します。
ws['A1'].fill = fill
これによりセルの背景色を変更することができます。
以下に簡単な例を記します。
import openpyxl
from openpyxl.styles import PatternFill
wb = openpyxl.load_workbook("C:\test.xlsx")
ws = wb['test']
fill = PatternFill(patternType="solid", fgColor="ff3333")
ws.cell(5, 4).fill = fill
wb.save("C:\test.xlsx")
wb.close()
行列の背景色を変更する方法
ここまではセル単体の背景色の変更について解説してきました。次に指定した行列を一気に変更する方法を解説していきます。
ここでは以下のエクセルを利用します。

指定した行の背景色を変更する
指定した行の背景色を変更するには次のようなスクリプトを実行します。
import openpyxl
from openpyxl.styles import PatternFill
wb = openpyxl.load_workbook("C:\test.xlsx")
ws = wb['test']
fill = PatternFill(patternType="solid", fgColor="ff3333")
for row in ws:
for cell in row:
if cell.row in range(2, 12):
if cell.row % 2 == 0:
ws[cell.coordinate].fill = fill
wb.save("C:\test.xlsx")
wb.close()
上記を実行すると次のように行の背景色が変更されます。

指定した列の背景色を変更する
指定した列の背景色を変更するには次のようなスクリプトを実行します。
import openpyxl
from openpyxl.styles import PatternFill
wb = openpyxl.load_workbook("C:\test.xlsx")
ws = wb['test']
fill = PatternFill(patternType="solid", fgColor="ff3333")
for row in ws:
for cell in row:
if cell.row in range(2, 12):
if cell.column in [1,3,5]:
ws[cell.coordinate].fill = fill
wb.save("C:\test.xlsx")
wb.close()
上記のスクリプトを実行すると次のように列の背景色が変更されます。

まとめ
本記事「【Python】openpyxl:エクセルの背景色を変更する方法(セル・行列)」はいかがでしたか。
openpyxlを利用することで、Pythonでエクセルを自由に操作することができます。
業務で多くのエクセルを使う方は、openpyxlを使って業務の自動化にチャレンジしてみてください。