PythonでExcelの別シートからデータを集める方法

Pythonを使って、Excelの別シートからデータを集めることもできます。

※Pythonの画面 by FUJIFILM X-Pro3+90mmF2

Pythonの前提

PythonでExcelの操作をするには、
・Pythonのインストール、ダウンロード
・PowerShell(Windows)、ターミナル(Mac)で、openPyxlをインストール
という手順が必要です。

この記事や動画を参考にしていただければ。

PythonによるExcel転記(コピー)自動化の基礎

Pythonをコピペして使う方法

 

PythonでExcelの別シートから転記

今回の事例は、こういったシートが4月から翌年3月まであり、その合計値を

シート「集計」に集めるというものです。
合計値のセルはシートごとに異なります。
同じ場所の場合はもっとシンプルです。

PythonでExcelの転記をするなら、こう書きます。
wbはファイルを意味し、wb['4月’]でシート「4月」、wb['4月’]['d38’]でシート「4月」のセルD38という意味です。


シート「4月」のセルD38をシート「集計」のセルB1に転記する場合、
・Excelを操作するライブラリ(アプリのようなもの)を開く
・Excelファイルにアクセスする(値のみ)
・転記する
・保存する
という手順になります。

Excelファイルの指定をするには、エクスプローラー(Windows)・Finder(Mac)でパス名をコピーしましょう。
Pythonは、Excelファイルを閉じた状態で実行する必要があり、最後に保存する必要があります。

これをすべてのシートで繰り返すように変えていきましょう。

PythonでExcelのすべてのシートから転記

Pythonで繰り返しをするときに使うのは、forです。
その下のインデントがついている部分(Tab)を繰り返します。
まずは、このように変えてみましょう。
wsというのは各シートを意味します。

wb['4月’]をwsに書き換えます。
これで各シートを指定できるのです。

このd38は、こう書くこともでき、さらに

38をws.max_rowに書き換えましょう。
各シートで、最終行(max_row)は違うのでこう指定するのです。

Pythonの場合、文字と数字をくっつける(+)ことはできないので、ws.max_rowをstr(string=文字)で文字にします。

このままだと、b1にずっと転記してしまうので、1行ずつずらします。

 

rowに1を入れて、まずはB1、次にB2、B3……と増やしていくようにこう変えましょう。

全体はこんな感じです。
Excelファイルも置いておきます。
EX-ITサンプル_複数Excelシート集計Python.xlsx

#ライブラリの読み込み
import openpyxl


#設定
file=r'/Users/yoichiinoue/Dropbox/EX-ITサンプル_複数Excelシート集計Python.xlsx'


# Excelファイルの読み込み
wb=openpyxl.load_workbook(file ,data_only=True)

#転記先の行
row=1

#転記
for ws in wb.worksheets:

     wb['集計']['b'+str(row)].value = ws['d'+str(ws.max_row)].value
     row=row+1


# 保存
wb.save(file)

 

なお、Excelマクロ(VBA)だと、こう書きます。
比べていただくと同じようなことをしていることがわかるかと。

Excelマクロだと
・別途インストール、設定が必要ない(ほぼ)
・Excelファイルを開きながら実行できる
というメリットがあり、
Pythonだと、
・Excel以外の自動化にも使いやすい
・Excelと他のアプリの組み合わせの自動化もしやすい
という特徴があります。

Pythonのほうがシンプルで、最終行をmax_rowと入れて気軽に使えるのも便利です。
試してみていただければ。

 



■編集後記
昨日は、メールコンサルティング、週刊メルマガ執筆、YouTube収録など。
カメラのレンズ試しも。

1日1新Kindle『1日1新』Instagram『1日1新』
チョップドサラダデイズ

■娘(4歳8ヶ月)日記→Kindle『娘日記』
勤労感謝の日を保育園で教えてもらったようで、「パパとママにありがとうって言う」と楽しみにしています。
パパも一応含めてくれているようです。
ブログは仕事と認めてくれているので。
会社に行ってないけど。