【Python自動化】openpyxlを使ってエクセル内でピポットテーブルを組む

Python・GAS・DS

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

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

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

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

合わせて確認したい記事

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

今回の論点整理

今回のアウトプット

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

イメージとしては以下のように、必要なデータを選択・作成して2軸でクロス集計表を作る作業をプログラムにやってもらいます。

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

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

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

ツマ

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

今回の位置づけ

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

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

前ステップはこちら

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

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

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

抑えドコ!
  • 他からデータをひっぱってくる
  • クロス集計を行う
  • 並び替えを行う

順に触れていきます。

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

① 他からデータをひっぱってくる

まずは必要なデータを該当エクセルに書き込みます。

下記のコードで、必要なファイル(販促リストのデータの一部)を指定し、まとめたいブック(支社売上ファイル)に転記します。

#データを読み込み必要データを抽出する
import pandas as pd #pandasをインポート
df = pd.read_excel ("販促リスト.xlsx",sheet_name="Sheet1") #ブックを読み込み
df = df[df.支社名 == "東京"] 

#シートごとに別のエクセルブックに書き出し
with pd.ExcelWriter("支社売上リスト.xlsx",date_format='YYYY/MM/DD',datetime_format='YYYY/MM/DD') as writer:
    df.to_excel(writer, sheet_name="東京",index=False)

更に、エクセルでの実務を考えると他のシートから指定のデータを紐づける形でリッチにして分析・集計作業を行うと思います。

冒頭のイメージで言うとこの部分です。

#PythonでVlookup
#2つのデータ(df,df2を'支社名'をキーにして突合し、新しいデータ(df_vlook)として出力
df_vlook = pd.merge(df,df2, on='支社名', how='outer')

いわゆるエクセルの「vlookup」的なやつですね。これも一緒に実施しておきたいと思います。pandasでの作業は調べると色々解説されています。

■ご参考記事:pandasの使い方 (外部サイトに移動します)

ワタシ

エクセルでの実務を考えるとこれはマストですよね…。。

② 並び替えを行う

次に並び替え作業をプログラム化して整理します。

これはシンプルに下記のようにsort_valuesを使えば基本的には終わりです。

#情報を並び替えて別のファイルに書き出す
df = pd.read_excel("販促リスト.xlsx",sheet_name=None) 
df = df["Sheet1"].sort_values(['日付', '売上金額'],ascending=[False, False]) 

特にこれ以上でも以下でもなく、サクッとやるべきことだと思うので上記とセットでコードを入れておくと良いと思います。

ツマ

これはどこの会社でもよくやる作業だね。

③ クロス集計を行う

そして最後に上記で出来たテーブルセットを元にクロス集計を行います。

これはいわゆるエクセル業務でいう「ピポットテーブル」というやつですね。ここの部分です。

結論から先に書くと以下のような形です。

#クロス集計表を作成する
df = pd.crosstab(df['日付'], df['支社名'],values=df['売上金額'],aggfunc="sum",margins=True,margins_name='合計')

一見難解そうに見えますが、紐解くと難しくはなく、一度形をつくっておけば後は変数を変えるだけで流用がしやすいので汎用性は高いと思います。

ワタシ

2軸でまとめるだけでなんかそれっぽくなります。

まとめ 

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

今回の抑えドコ
  • 他からデータをひっぱってくる
    ▷必要なデータセットをまとめます。(vlookup的なこと)
  • 並び替えを行う
    ▷ソートをしてデータを整理する。
  • クロス集計を行う
    ▷必要な軸で2軸で分析をします。(ピボットテーブル的なこと)

冒頭申し上げた通り、出来ること一つ一つは大したことないですが、どれもエクセル作業の基礎のパーツになっているかと思います。

そのため、上記をまずは出来る範囲で試しつつも、目の前の仕組を変えられる範囲で少しずつプログラムして、小さなパーツを積み上げる先に完全自動化があると思います。

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

【参考】Python初心者のお勉強のお供

▼PythonでExcelの操作を自動化する▼

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

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

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

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

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

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

▼オススメの参考書籍(Kindle)▼

created by Rinker
¥2,138 (2024/03/29 12:33:19時点 Amazon調べ-詳細)

▼おすすめの動画学習(Udemy)

>>ゼロからPythonで学ぶ人工知能と機械学習 【2023年最新版】

>>現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用

>>独学で身につけるPython〜基礎編〜【業務効率化・自動化】

【参考】Python初心者が抑えたいポイント集

Python(主にデータ分析・自動化)に関しては

下記に実践したポイントをまとめています。基本的にコピペするだけでそのまま使えます٩( ᐛ )و

【Python入門】コピペしてそのまま使えるPythonの自動化プログラムまとめ

業務効率化・自動化においてはGoogle Apps Scriptもセットで学ぶことをオススメ!

こちらもコピペしてすぐに使えます!

【GAS入門】コピペしてそのまま使えるGoogle Apps Scriptプログラム一覧

PythonとGoogle Apps Scriptどちらを深めようかを迷っていればこちら!

【徹底比較】PythonとGASをどちらを学ぶべきか?実際に両方を学んで分かった違いとオススメ学習法