Pythonで作業を効率化しよう!第二回
Light Webアルバイトのマキシと言います。
日々の作業の効率化をできるようにするためにPythonを取得しようと思い立ちました。
Pythonはシンプルなコードで初学者にも優しいプログラミング言語で豊富なライブラリを使うことで、自分が1からすべて作るのではなく、効率的にプログラムの作成を進めることができます。
そんな人気の高いプログラミング言語のPythonの基礎からスクレイピングまでの学習のアウトプットを月1で連載していきたいと思います。
第二回はExcel操作の自動化で有名なプラグインの一つのopenpyxlを紹介します。
目次
01PythonでExcelの操作
PythonとExcelの基本
Pythonでは様々なライブラリが用意されているので利用することでExcelでの作業を自動化することができ、日々の業務の効率化が図れます。
Excel操作で特に有名なライブラリがopenpyxlとpandasの2つになります。
今回は初心者でも扱いやすいopenpyxlを紹介します。
PythonでExcelの操作をするメリット
PythonでExcel操作を行うメリットとして以下の点が挙げられます。
環境に依存することなく自動化ができる
Excel VBAを使用して自動化をするとMacとWindowsのExcelで互換性がないためどちらかの環境では動作がしないというようなことが起こります。
一方Pythonを使用するとこういった互換性の問題がなく、Windows、Macでも同じコードで自動化をすることができます。
他のアプリケーションとExcelを連携させることができる
前述したExcel VBAでは操作できるのはMicrosoft Office系統のみですが、Pythonは、オープンソースのプログラミング言語であるため、様々なアプリケーションと連携でき、効率よく業務の自動化ができます。
学習の敷居が比較的に低い
Pythonは、ほかのプログラミング言語に比べて、コードがシンプルで記述量が少なく済むため、比較的早い習熟が可能です。
また仕事でもよく使われるExcelを使用して学ぶことができるため身近に感じながら学習が行えるため円滑にPythonの基礎を学ぶことができます。
openpyxlとは?
openpyxlは、Excel操作をするPythonのライブラリの中では有名なライブラリの1つです。
主にExcelファイルや書式の読み書きに使用され、データ処理や計算にはあまり向いていないためデータ処理や計算にはPandasを使用するのが一般的です。
openpyxlは、罫線、フォント、背景色などの書式も含めて、Excelファイルをそのまま読み書きできる(全ての書式まではカバーしていません)ため、書式を保つ必要のある帳票をExcelで作成する場合に向いています。
また特徴として他のExcelを操作するライブラリの中でも処理が高速です。処理速度を重視するのであればPandasよりもopenpyxlに軍配が上がります。
02openpyxlの使い方
openpyxlの基本的な使い方を説明します。
今回の私の実行環境は以下のようになります。
- Visual Studio Code(以降VSCode)
- VSCodeプラグイン「jupyter」
- Python 3.12.1
2-1 openpyxlのインストールとインポート
VSCodeを開き、新しいファイルを作成します。
ファイル>新しいファイル>Jupyter Notebook をクリックします。VSCodeでCtrl + Shift + @コマンドからターミナルを起動します。
以下のコードをターミナルに入力
python -m pip install --user openpyxl
カーネルを選択します。
右上の「カーネルを選択」をクリックしてカーネルを選択します。
jupyterではカーネルを選択しなければpythonを実行できません。jupyterファイルの方に以下のコードを入力します。
import openpyxl
shift+enterでコードを実行します。
※enterだけでは改行になります。チェックマークの表示が出たらインポートが完了し、openpyxlを使用する準備ができたことになります。
私の環境では既にjupyterをインストール済みだったのですが、jupyterをインストールしていない場合は以下のような操作が必要になる場合があります。
jupyterパッケージをインストールしていない状態で、Pythonのコードを実行しようとするとipykernelをインストールするようなメッセージが出てきます。
この場合はインストールをクリックしてipykernelをインストールすることでPythonのコードを実行できるようになります。ipykernelとは
ipykernel は、Jupyter Notebook 用の Python カーネルとして機能する強力なツールです。
ipykernel は、複数のプログラミング言語での対話型コンピューティングのためのコマンドシェルであるIPythonの上に構築されており、Jupyterやその他の互換性のあるノートブック内でPythonコードを実行することができます。
Jupyter ノートブックの世界では、ipykernel は重要な役割を果たしています。それは基本的には Pythonコードの実行を容易にする upyterカーネルです。「カーネル」という用語は、ノートブック文書に含まれるコードを実行する計算エンジンを指します。
Jupyterノートブックは複数のカーネルをサポートできますが、ipykernelは特に Python コードの実行に特化しています。
2-2 Excelファイルを読み込む
データの取得と書き込みを行うため、簡単なもので良いのでデータが入っているファイルの方を事前に用意してください。
Excelファイルを読み込む際は以下のコードを使用します。
openpyxl.load_workbook("開くExcelファイルのパス")
例)wb=openpyxl.load_workbook(“excel/test.xlsx”)
Excelファイルのパスですが、私のフォルダ構成が
Python
-jupyterファイル
-excel
–Excelファイル
なのでパスの書き方が上記のようになります。
ファイルを読み込んだらExcelのシートを指定するためシートを変数に代入します。
例)ws=wb[“テスト”] ←[]にはシートの名前を入れてください。
変数名はなんでも良いのですが、多くの例でworksheetを略したwsの形が採用されていました。
wbも同じようにworkbookを略したものなので関係ないものよりは沿った変数にした方が良いと思います。
シート名は全角半角を間違えるとエラーになるので注意してください。
2-3 セルの値を取得する
セルを取得するコードは以下のようになります。
シートの変数名.cell(row=行番号,column=列番号).value
例) ws.cell(row=2,column=2).value
2-4 セルに値を挿入する
セルに値を挿入する際は以下のようにします。
シートの変数名.cell(row=行番号,column=列番号).value=挿入したい値
このままではファイルを開いても反映されてはいません。
2-5 書き込んだデータを保存する
セルの値を変更したり、挿入しただけではExcelファイルには反映されないため以下のコードを入力して保存します。
excelファイルを代入した変数.save("excelファイルのパス")
例) wb.save(“excel/test.xlsx”)
保存は上書きだけでなく、新しいファイルにするのも可能です。
例) wb.save(“excel/test2.xlsx”)
2-6 2つのファイルを使用してExcel操作を行う
それぞれのexcelファイルを変数に代入する
それぞれのファイルのシートを変数に代入する
シートからシートへ値を挿入する
セルの値を取得 「シートの変数名.cell(row=,column=).value」
セルに値を挿入 「シートの変数名.cell(row=,column=).value=挿入したい値」
例) テストA.xlsxからテスト集計.xlsxに値を書き込む
テストA.xlsxのシートの2行2列目の値をテスト集計.xlsxのシートの2行3列目に書き込む作業をします。
まずはそれぞれのシートの値を確認します。
print(ws_test_a.cell(row=2,column=2).value)
print(ws_test_shuukei.cell(row=2,column=3).value)
実際のExcelファイルは以下のようになります。
テストA.xlsxの2行2列目の値をテスト集計.xlsxの2行3列目に書き込みます。コードは以下のようになります。
ws_test_shuukei.cell(row=2,column=3).value=ws_test_a.cell(row=2,column=2).value
書き込みが成功したか値を確認します。
print(ws_test_shuukei.cell(row=2,column=3).value)
値は書き込めましたがこのままではExcelファイルに反映されていないのでsaveメソッドで上書きをします。
wb_test_shuukei.save("excel/テスト集計.xlsx")
また以下のように名前を変えることで新規に別ファイルで保存することも可能です。
wb_test_shuukei.save("excel/テスト集計1.xlsx")
確認のためExcelファイルを開いて確認をします。 無事に書き込まれていました。
2-7 複数列の値をfor文を使って書き込む
先ほどは1つのセルだけ書き込みましたが、今度はfor文を使用して1行分を書き込みます。
for文とは、プログラミングで使う構文のひとつで、繰り返し(ループ)処理を行う際に用いられる構文です。
Pythonでのfor文は以下のような形になります。
for i in range(繰り返したい回数):
実行したい処理 iの部分は変数なので自由にしていいのですがiという数値はよく用いられます。
例)
for i in range(10):
print(i)
注意したいのは繰り返しでiに代入されるのは0から始まるため、range(10)の場合繰り返しは0〜9になります。
今回はテストA.xlsxからテスト集計.xlsxに1行分のデータを書き込みます。
まず完成形がこちらになります。
for i in range(ws_test_a.max_column-1):
ws_test_shuukei.cell(row=2,column=3+i).value=ws_test_a.cell(row=2,column=2+i).value
解説
rangeの中には繰り返す回数をセットします。
テストA.xlsxには1~30日までの売り上げが入っているので繰り返す回数は30になります。
シートのよっては日数が変わる場合もあるでしょう。その度にrangeの回数を変更するのは効率が悪いため、データの入っている最後の列が何列目かを調べるメソッドを使用します。
ws_test_a.max_column
今回は1列目に売上という見出しが入っているため「ws_test_a.max_column-1」としています。
ws_test_shuukei.cell(row=2,column=3+i).value=ws_test_a.cell(row=2,column=2+i).value
1行分のデータを書き込むためrowの部分はどちらも2になります。
列の部分の数字を繰り返すたびに足していきたいためcolumnにiを足しています。
これで1行分の書き込みが行われます。
最後にExcelファイルに反映させるため「wb_test_shuukei.save(“excel/テスト集計.xlsx”)」と上書き保存をします。
03PythonでExcelの操作
Pythonのプラグインのopenpyxlを使ったExcelファイルの操作の一部をご紹介しました。
PythonでのExcelファイルの操作はデータ分析や業務自動化の第一歩です。
次回もライブラリを使用した自動化を紹介していけたらと思います。