【Python自動化】openpyxlで読み込んだExcelデータをキレイに加工する方法

Python・GAS
ワタシ

今回は社内でのエクセル業務の自動化について理解を深めます。

Pythonを使うと、Excel仕事を効率化・自動化することが可能です。

では具体的にどうやるのか?Pythonかじりはじめたばかりでもできるのか?実務で使えるのか?

この点を明らかにするべく、営業上がり・非エンジニアの私でも出来るレベルの効率化ワザをまとめます(‘◇’)ゞ

合わせて確認したい記事

Pythonを時短で基礎から応用まで一気に学びたい時はこちらもオススメ!
>>【Python】TechAcademyを実際に使ってみて学べたこと

今回の論点整理

今回のアウトプット

今回は既存のエクセルデータの編集をPythonを使って行います。

イメージとしては以下のように、簡易的なエクセルの表を「フォント・列行幅・色付けなどで綺麗に整理して共有できるレベルにする」ことです。

普段はwindows機を使っているので、ここらへんはマウスを使って、エクセルでポチポチやっているわけですが、これを効率化できないかと考えます。

特に、定型的な業務になっているものは、毎回開いて同じ加工をする作業は自動化できるはず!という思想に則り考えます。

参考にしているのは以下の書籍で、実践に活用しようと思います。ポイントを絞ってかなり詳しく記載してもらえておりオススメです。

ツマ

参考書があると目的に対して勉強の流れが明確になるね。

今回の位置づけ

また、この領域を自動化させるために必要なステップは以下の6ステップだと考えています。

そもそも現業の何の自動化をめざすのか?という点については下記に記載しています。

【Python自動化】openpyxlを使って 社内のExcel作業を自動化する

その上で、今回はデータは何らかの形で抽出されている前提で、そのデータをいじる工程であるSTEP3を対象にします。

上記を実現する手順について下記に備忘録的にまとめたいと思います。

今回のポイントは以下の3点になります。

抑えドコ!
  • 書式設定・フォント変更を行う
  • 罫線の変更を行う
  • 列の幅を変更する

順に触れていきます。

Excel業務の自動化に向けたポイント

書式設定を行う

まずは該当エクセルを開きフォントの変更からします。

下記のコードで、フォントが変更になったことが分かると思います。

#ライブラリopenpyxlをインポート
import openpyxl 
from openpyxl.styles import PatternFill, Border,Side, Alignment, Protection, Font

#列見出しのフォントを定義
column_font = Font(name='Meiryo UI',size=15,bold=False,
          italic=True,vertAlign=None,underline='none',
          strike=False,color='FF0000')
#列見出しの配置を定義
column_alignment=Alignment(horizontal='center',vertical='bottom',
               text_rotation=0,wrap_text=False,
               shrink_to_fit=False,indent=0)

これで1行目の見出しのフォント設定などははできました。

次に、表のフレームを変更していきます。

ワタシ

エクセルだとポチポチで終わるで気が付きませんが、はこんなプログラムが裏で走っているんですね。

罫線の変更を行う

その上で罫線を変更します。やりたいことは大きくは2点です。

  1. 見出しだけアンダーバーを二重線にする
  2. 全体はシンプルな罫線で周りを囲む

子どは以下のようになります。

#⓵列見出しのケイ線を定義
border = Border(left=Side(border_style="thin",color='000000'),
               right=Side(border_style="thin",color='000000'),
               top=Side(border_style="thin",color='000000'),
               bottom=Side(border_style="double",color='000000'))

#⓶セルのケイ線を定義(全体用)
border2 = Border(left=Side(border_style="thin",color='000000'),
               right=Side(border_style="thin",color='000000'),
               top=Side(border_style="thin",color='000000'),
               bottom=Side(border_style="thin",color='000000'))

これで表のフレームが出来ました。

ツマ

left, right, top, bottomと直感的に分かりやすいね。

列の幅を変更する

そして最後に列の幅を変更します。

プログラムは以下の通りです。

#各種設定
sheet = workBook["東京支社"] #シート「新宿店」を選択
sheet.column_dimensions["A"].width = 12 #列の幅を設定(文字数)
sheet.column_dimensions["B"].width = 12 #列の幅を設定(文字数)
sheet.column_dimensions["C"].width = 15 #列の幅を設定(文字数)

この数字をいじれば幅が変わります。

また、今回は見出しのみを強調するのでif文を使って条件分岐をします。

併せて、今回数字をあつかうのでセルの書式(数値)の設定も合わせて行います。

これを同様に必要な箇所のみを強調する場合はifで分岐をして以下の通りにします。

#数値の書式を定義
number_format = '¥#,##0;¥-#,##0'
workBook = openpyxl.load_workbook("東京支社売上リスト.xlsx") #エクセルブックを開く
#上記のパーツを全て合体させてファイル出力まで行うと下記の通り
sheet = workBook["東京支社"] #シート「新宿店」を選択
sheet.column_dimensions["A"].width = 12 #列の幅を設定(文字数)
sheet.column_dimensions["B"].width = 12 #列の幅を設定(文字数)
sheet.column_dimensions["C"].width = 15 #列の幅を設定(文字数)
for row in sheet: #行ループ
    for cell in row: #列ループ
        cell.border = border2
        if cell.row == 1: #1行目に列見出しの書式を割り当てる 
            cell.font = column_font #列見出しのフォントを設定
            cell.alignment = column_alignment #列 見出しの配置を設定
            cell.border = border #セルのケイ線を設定
        if sheet.cell(row = 1, column = cell.column).value == '売上金額': #もしも列が売上金額のとき
            cell.number_format = number_format #セルに数値形式の書式を設定
workBook.save('東京支社売上リスト(整理).xlsx') #ファイル名を指定して保存

これで綺麗に出力することが出来ました!

ワタシ

色や罫線などは細かく設定できるので一度型が出来れば微修正は簡単ですね

まとめ 

上記を活用する際に、理解しておくべきポイントは以下3点でした。

今回の抑えドコ
  • 書式設定を行う
    ▷openpyxl.stylesの関数を使って各種設定する
  • 罫線の変更を行う
    ▷Borderを使ってtop, bottom, left, rightを設定する
  • 列の幅を変更する
    ▷width を使って設定する

ここまで出来ると型としてはキレイにまとめる状態までは出来ると思います。

個人的には、自作リフィルなどもプログラムをして型を定量的に綺麗にすることなども検討したいと思っており、普段使いのものも自動化できる可能性があります。

会社業務でも個人的なことでもこまごま系のものを自動化して少しずつ時間を作っていく先に、思い描く完全自動化の仕組が出来るのだと思います。

ご精読頂きありがとうございました!
m(_ _)m

その他、Python初心者のお勉強のお供

上記の内容と併せて実務で活かすという視点では下記の参考図書も合わせて確認すると理解が深まります(-_-)

created by Rinker
¥2,138 (2021/10/28 13:25:22時点 Amazon調べ-詳細)

その他、Python初心者が抑えたいポイント集

Python(主にデータ分析・自動化)に関しては下記のポイントを抑えると実務力につながっていきますので合わせてご参照下さい(‘ω’)ノ

ーPythonのインストール、データ読み込み、各種分析を試すー

【Python入門】WindowsとiPad両方でプログラミング環境を整える

【Python入門】エクセルファイルの読み込み方法

【Python入門】エクセルの”ピボットテーブル”をプログラムする

【Python入門】データ分析の”ビジュアル化”で抑えるべきライブラリとは

【Python入門】回帰分析や分類問題が使えるsklearnの使い方

【Python入門】顧客データを読み込みクラスタリング・ペルソナ分析

【Python入門】画像データを元にディープラーニングで自動判別(CNN等)

【Python入門】WEB上のデータを抽出してテキストマイニング(スクレイピング)

【Python入門】Twitterデータでテキストマイニング(APIの利用)

【Python入門】機械に自動でモデル選定させる(AutoML活用)

【Python入門】iPad×Kaggleで手軽な学習環境を創る

【Python入門】iPad×Google Colabalatoryで手軽にtwitter分析

ーPythonを使ってExcelを扱う “openpyxl”の活用ー

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる①

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる②

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる③

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる④

【Python初心者】Python×効率化 社内のexcel作業の自動化を試みる⑤

合わせて確認したい記事

Pythonを時短で基礎から応用まで一気に学びたい時はこちらもオススメ!
>>【Python】TechAcademyを実際に使ってみて学べたこと