Pythonを使うとエクセルのデータを読み込み、セルの色を変更することができます。
今回はエクセルの値を読み込み、条件分岐を使ってセルの色を変更していくプログラムを紹介します。
・データに応じて条件分岐させて色を変更する
それでは以下で詳しく紹介していきます。
ExcelデータをPythonで処理するプログラムの概要
今回はPythonでエクセルの値に応じて、色を変更するプログラムを解説します。
実際に以下の作業をpythonで行うことを目指します。
・値が未入力のセルを赤くする
・値が10以下のセルを黄色くする
Excelのセルの値を一つずつ読み込み、その値に応じてセルの色を変更していきます。
Pythonプログラムを実行するための準備
事前の準備として、openpyxlを使えるようにライブラリ設定をします。
準備|openpyxlモジュールのインストール
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install openpyxl」と入力して[Enter]
4. インストール完了
これでインストールが完了し、openpyxlを使えるようになります。
それでは以下でプログラムを解説していきます。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#プログラム1|ライブラリの設定 import openpyxl as px from openpyxl.styles import PatternFill #プログラム2|対象エクセルのファイルパスを指定 filepath = 'sample.xlsx' #プログラム3|エクセルを読み込む wb = px.load_workbook(filename=filepath) ws = wb['データ'] #プログラム4|最終行と最終列を取得 lastrow = ws.max_row lastcol = ws.max_column #プログラム5|変数kikakuの値を設定 kikaku = 10 #プログラム6|各セルの値を取得 for row in range(2, lastrow+1): print(row) for col in range(2, lastcol+1): val = ws.cell(row= row, column= col).value # プログラム7|値が入っていないなら、セルを赤色にする if val == None: ws.cell(row=row, column=col).fill = PatternFill(patternType='solid', fgColor='FF0000', bgColor= 'FF0000') # プログラム8|値が変数kikaku以下なら、セルを黄色にする elif val <= kikaku: ws.cell(row=row, column=col).fill = PatternFill(patternType='solid', fgColor='FFFF00', bgColor= 'FFFF00') # プログラム9|エクセルファイルの保存 filename = 'sample2.xlsx' wb.save(filename) |
以下で詳しく説明しています。
プログラム1|ライブラリの設定
1 2 3 |
#プログラム1|ライブラリの設定 import openpyxl as px from openpyxl.styles import PatternFill |
プログラム解説
1 2 3 |
#解説 ・openpyxlのライブラリをpxという変数(略称)で呼び出す ・PatternFillを使えるようにする |
PatternFillを使えるようにすることで、セルの背景色をカンタンに変更できるようになります。
プログラム2|エクセルを読み込む
1 2 |
#プログラム2|対象エクセルのファイルパスを指定 filepath = 'sample.xlsx' |
プログラム解説
1 2 |
#解説 Pythonファイルと同じフォルダ内の「sample.xlsx」のフォルダパスを取得 |
この事例では、対象のエクセルファイルをpythonプログラムと同じフォルダに保存してあります。
画像
もしpythonを保存してあるフォルダと異なるフォルダのExcelファイルを操作したい場合は、フルパスを指定する必要があります。
フルパスとは、「C:\Users\xxx\Dropbox\Python\Program\100_Excel\104_Excel_fileTenki」のようなファイルやフォルダの所在地について正確に記載したパスを指します。
プログラム3|エクセルをpandasで読み込む
1 2 3 |
#プログラム3|エクセルを読み込む wb = px.load_workbook(filename=filepath) ws = wb['データ'] |
プログラム解説
1 2 3 |
#解説 プログラム2で指定したExcelファイルをwbとして読み込む 読み込んだExcelファイルの「データ」シートをwsで設定 |
プログラム4|最終行と最終列を取得
1 2 3 |
#プログラム4|最終行と最終列を取得 lastrow = ws.max_row lastcol = ws.max_column |
プログラム解説
1 2 3 |
#解説 変数lastrowに最終行の行番号を取得 変数lastcolに最終列の列番号を取得 |
プログラム5|変数kikakuの値を設定
1 2 |
#プログラム5|変数kikakuの値を設定 kikaku = 10 |
プログラム解説
1 2 |
#解説 変数kikakuに10を設定 |
変数kikakuの値は、閾値(しきいち)として使います。
具体的には、以降のプログラムで変数kikakuの値(ここでは10)を下回る場合に、セルを黄色に変更します。
プログラム6|各セルの値を取得
1 2 3 4 |
#プログラム6|各セルの値を取得 for row in range(2, lastrow+1): for col in range(2, lastcol+1): val = ws.cell(row= row, column= col).value |
プログラム解説
1 2 3 4 |
#解説 2行目からlastrow+1まで1行ずつ処理を繰り返す 2列目からlastcol+1まで1列ずつ処理を繰り返す 変数valにセルの値を取得 |
range(2,lastrow+1)とすることで、2行目からlastrow(16行目)まで繰り返し処理を実行可能です。
rangeの仕様上、lastrow+1とする必要があるので、「+1」を忘れないようにします。
lastcol+1も同様です。
プログラム7|値が入っていないなら、セルを赤色にする
1 2 3 |
# プログラム7|値が入っていないなら、セルを赤色にする if val == None: ws.cell(row=row, column=col).fill = PatternFill(patternType='solid', fgColor='FF0000', bgColor= 'FF0000') |
プログラム解説
1 2 3 |
# 解説 もしval(各セルの値)に何もデータがなければ セルの背景色を赤色にする |
セルを赤くすることで、データの入力漏れをアラートします。
プログラム8|エクセルへ文字列を出力
1 2 3 |
# プログラム8|値が変数kikaku以下なら、セルを黄色にする elif val <= kikaku: ws.cell(row=row, column=col).fill = PatternFill(patternType='solid', fgColor='FFFF00', bgColor= 'FFFF00') |
プログラム解説
1 2 3 |
#解説 もしval(各セルの値)が変数kikaku以下だったら セルをの背景色を黄色にする |
プログラム7(if)とプログラム8(elif)は条件分岐をさせています。
まずプログラム7で値が未入力であれば、赤く塗りつぶす。
そしてプログラム8で(値が入力されているが)kikaku以下だったら黄色く塗りつぶすようにしている。
プログラム9|エクセルファイルの保存
1 2 3 |
# プログラム9|エクセルファイルの保存 filename = 'sample2.xlsx' wb.save(filename) |
プログラム解説
1 2 3 |
#解説 変数filenameを「sample2.xlsx」にする filename(sample2.xlsx)として新しいファイルとして保存 |
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。