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

Python・GAS
ワタシ

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

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初心者のお勉強のお供

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

created by Rinker
¥2,138 (2023/03/20 20:18:33時点 Amazon調べ-詳細)

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

プログラミング言語の人気オンラインコース >>プログラミング講座はコチラから

※評価が4.0を超えて割引にもなっているコンテンツは特におすすめです!

その他、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を実際に使ってみて学べたこと