【短期集中連載】〈第3回〉何万回のコピペがゼロに!Excel作業を自動化するPythonプログラム実例
テレワークで上司から大量の単純作業を振られ、家で黙々と作業をこなすビジネスパーソンの救世主! 単純な事務作業の手間をなんと10分の1以下に圧縮する時短化ツール、Python。
『めんどうな作業が秒速で終わる! Excel×Python自動化の超基本』(宝島社)の著者である伊沢剛さんにExcel×Pythonのすごさを解説していただく連載も、第3回を迎えました。
今回は、実際の作業を自動化するプログラムの一例として、「コピペ」のプログラムの動作を紹介します。Excel×Pythonのすごさを実感してみてください!
複数のExcelシートにあるデータを1つのシートに統合!
Excel×Pythonの実例として、Excelブックの中にある複数のシートに入力されたデータを拾い出し、コピペするプログラムを紹介しましょう。
シートごとに月次で分けられたデータを、1つのシートにまとめたいときなどに使えます。
実際のプログラムコードは以下のとおり。
日本語でコメントをつけているので、「このコードでこんな動きをするんだ!」となんとなくつかんでみてください。
複数のシートの情報を1つのシートにまとめる
import pandas as pd #pandasをインポート
#指定したブックのすべてのシートを読み込み
df = pd.read_excel(“店舗別売上リスト.xlsx”,sheet_name=None)
dataList = [] #集計表へ書き出すデータを保存するリスト
sheetsList = list(df.keys())
for sheet in df: #シートループ
for index,rows in df[sheet].iterrows(): #行ループ
work = [] #作業用リスト
for row in rows:#列ループ
work.append(row)
dataList.append(work)
columns = list(df[sheetsList[0]].columns) #列名をリストで取得
df[“統合表”] = pd.DataFrame(dataList,columns=columns)#集計表に全店舗の売上データを追加
#シートごとにエクセルブックに書き出し
with pd.ExcelWriter(“店舗別売上リスト.xlsx”,date_format=’YYYY/MM/DD’,datetime_format=’YYYY/MM/DD’,mode = “a”) as writer:
df[“統合表”].to_excel(writer, sheet_name=”統合表”,index=False)
細かいコードの説明はここでは割愛しますが、注意したいのは、ファイルの保存場所やファイル・シートの名称の違い。半角・全角やスペースが少し違っただけでうまくプログラムが動かなくなってしまいます。
今回は事前に、3つのシートが入ったExcelデータを作って「店舗別売上リスト.xlsx」という名前を付け、以下のように保存しています。
このExcelデータが、コードの中で指定しているデータの読み込み元になるわけです。
それでは、プログラムを実行してみましょう! 「店舗別売上リスト.xlsx」のファイルを閉じておくのを忘れないようにしてください。
成功すると、次のようなシートが新しく作成されています。
「統合表」のシートが追加されており、上のキャプチャのようにデータがまとめられていれば、プログラム成功です。
実際にPC上でどのようにプログラムが動くのかは、次の動画で確認できます。
Excelのシートを行ったり来たりしていちいちコピペする作業はけっこう面倒ですし、疲れていればミスも多くなります。
たとえば上司から「100ある店舗ごとにシートが分けられた売上集計のデータをコピーして、1つのシートにまとめて」と指示されたら、けっこう頭が痛くなるのではないでしょうか。ミスチェックも含めて半日がかりは必至です。
しかし、この項目で紹介したコードをアレンジして実行すれば、作業時間は30分もかからないはず。転記ミスはゼロで、一度プログラムを作ってしまえば次に同じ指示が来ても一瞬で対応することができます。
工程が多いほどコードは複雑になる……とは、必ずしも言えません。人間がやると時間がかかるけども実は反復が多いだけ、という作業はプログラムの大得意分野です。
コピペをアレンジするだけの簡単なコードで累計どれほどの時間が節約できるかを考えれば、やってみない手はないでしょう。
『めんどうな作業が秒速で終わる! Excel×Python自動化の超基本』(宝島社)
著/伊沢剛(教育系YouTuber)
定価/1980円+税
電子書店
https://www.amazon.co.jp/dp/4299008154/ref=cm_sw_r_tw_dp_x_XQWFFb4NSKKGN