目次
- 実際にPythonでExcelを操作
- Excelワークブックを読み込むプログラム
- イテラブルとは何か
- 空白のセルがあったらどう表現される?
2020.12.25
日々の事務作業を効率化させたいけれど、どこから始めていいのかわからない。
そのような思いを持つ人は「Python×Excel」から始めてみてはいかがでしょうか?
ここ数年最も注目を集めるプログラミング言語のひとつである、Python。その機能を活用する第一歩として我々の多くに利用経験のある表計算ソフトExcelは格好の題材です。
「Python×Excel」について全4回で基礎の基礎から教えるSchooの授業シリーズ『Excel×Pythonで業務効率化』。講師は第1種情報処理技術者の資格を持ち、エンジニア・ライターの両方の経験を持つ株式会社イーザー代表取締役副社長の金宏和實(かねひろ・かずみ)先生です。
第2回の『PythonでExcelシートを扱うには』では「PythonとExcel VBAの違い」について扱った前回の内容を踏まえ、いよいよ実際にPythonでExcelを操作する方法・Pythonの文法を取り上げます。
ここからはいよいよ実際にプログラムを入力していきます。
今回最初のプログラムは以下の通り。
Import openpyxl
wb=openpyxl.load_workbook(“.\sample.xlsx”)
for sheet in wb:
for row in sheet:
for cell in row:
print(cell.value)
「openpyxl」はPyhtonでExcelファイルの読み書きや操作を行うための外部ライブラリ。それを読み込んだら、変数「wb」をつくります。ライブラリ名に続けてExcelのワークブックを読み込むためのメソッド「load_workbook」を入力しましょう。メソッドの後には読み込むべきファイル名を(””)で囲んで指定します。「.」でカレントディレクトリを指定し、その後に「\【ファイル名】」を入力しましょう。
こうすることで、wb変数に指定のワークブックが読み込まれました。
その下の記述は「for文」が3つ連続で続いています。これは「ワークブック(wb)からシート(sheet)を取り出し、シートから行(row)を取り出し、行からセル(cell)を取り出す」という操作を意味します。そして、直下で「print(cell.value)」と記述し、セルの値を表示させるというわけです。
プログラムがすべて入力出来たら「実行(R)」タブをクリックし、「デバッグなしで実行(Ctrl+F5)」を選択します。すると、「sample.xlsx」に記述されているそれぞれの行の値が以下の画像のように表示されるというわけです。
このように「比較的簡単なプログラムでExcelブックの各セルに入っている値を取り出すことができます」と先生。それは、for文を使えば「wb」「sheet」「row」などのイテラブル(繰り返しに使えるオブジェクト)から次々に値を取り出すことが可能だからです。
Openpyxlライブラリを使えばExcelのシートや列がイテラブルとして扱えるため、Excelワークブックが非常に扱いやすくなるということです。
リアルタイム受講生からは続々と「できました!」というコメントが寄せられました。
授業ではイテラブルについてさらに掘り下げて説明が行われました。
「例えば……」と提示されたのが以下のプログラム。
str1= “Welcome”
for char1 in str1:
print(char1)
文字列「Welcome」が格納されたイテラブル「str1」の中から文字列を一つひとつ取り出して先ほどのように「print」で表示するプログラムです。
このプログラムを実行した結果、下図のように「Welcome」という文字列が一文字ずつ縦に並びました。
ここでリアルタイム視聴者から「.\だとエラーになります。カレントになるので.\を入れなければ正常に動作します」というコメントが寄せられました。このように浮かんだ疑問・困りごとをその場で相談できるのがSchooの授業をリアルタイムで受講する醍醐味です。
その疑問に応えて、先生からは「Macの場合は『/』を使います」という補足がなされました。
先ほどの「sample.xlsx」では値が隙間なく固まって格納されていました。
では、「G列は空白でH列1行目に『123,456』」「6行目は空白でA列7行目に7」のように値が空白のセルを挟んでとびとびに入力されていたらどうなるんだろう、と先生は問いかけます。
上記のようにExcelブックの内容を「空白あり」のものに改変したうえで「cell_scan2.py」に先ほど記述したプログラムを実行した結果、「None」「123456」「7」という値が加わった結果が出力されました。
すなわち、間の空白は最後の値の含まれている「行・列」を基準にした最大範囲を対象に読み込まれ、空白部分は「None」で代替して表示されるということです。
ここで「クイズです」と先生。
「Pythonでは値が入っていないとき「None」と表示されますが、ほかの言語の場合はどうなるでしょうか」というのがそのクイズの内容です。
その答えは「null」。見事言い当てたリアルタイム視聴者の皆さんも少なからず存在しました。
続いて授業は新たな段階「Excelファイルを書き込む」に入りました。
演習用として以下のコードが提示されています。
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws[“A1”].value= “書き込みテスト”
wb.save(“.\write_sample.xlsx”)
上記のコードの実行結果はいったいどうなるのでしょうか。気になる方はぜひ実際の授業動画にアクセスの上、31分ごろからの内容でご確認ください。
また、Pythonとはそもそも何か、どのように実行環境を構築すればよいのかなどの基礎をまず知りたい方は第1回「Python×Excel:Pythonの基礎を学ぶ」の授業動画をご覧になることをおすすめします。
文=宮田文机
今回の授業はこちら!
『Excel×Pythonで業務効率化 第2回 Python×Excel:PythonでExcelシートを扱うには』http://schoo.jp/class/7164/room
第3回「Python×Excel:シート間の転記処理をPythonで作成」、第4回「Python×Excel:シートの集計処理をPythonで作成」と以降のシリーズの授業ではより高度な「Python×Excel」の操作がレクチャーされます。
『第3回 Python×Excel:シート間の転記処理をPythonで作成』 http://schoo.jp/class/7165/room
『第4回 Python×Excel:シートの集計処理をPythonで作成』http://schoo.jp/class/7166/room
PythonによるExcel操作に慣れてきたという人はぜひそちらもチェックしてみてください。
ペンシルからのプッシュ通知を設定しておくと、新着記事のお知らせなどをブラウザ上で受信できて便利です。
通知を受信しますか?
前回の復習を終えて先生が開始したのが「ExcelデータのPythonによる読み込み」。今回読み込むExcelファイルは「sample.xlsx」。2つのシートで構成されており、「sheet1」「sheet2」ともに5行6列で、数値や文字列が格納されています。
「『sheet1』のA列は[1,2,3,4,5]、『sheet2』のB列は[10,20,30,40,50]ですよ」と金宏先生。
このExcelファイルを読み込むにあたってまず説明されたのが「新規にプログラムを作る」方法。事前に作成しておいたプログラミング用のフォルダにて「新しいファイルアイコンをクリック」し、できたファイルに任意の名前をつけましょう。なお、すでにあるファイルと重複する名前はつけることができません。
名前をつけてEnterボタンを押すと新しいプログラミング用のタブ(今回は「cell_scan2.py」)が作成されました。