Python×Excelで面倒な業務を効率化。まずはコピペから始めよう!
2/12021
カテゴリー:プログラミング
仕事に単純作業が多い理由
毎日の仕事を思い返してみると、単純作業が思いの他多いことに気づきます。
コピペする、集計する、加工する・・などなど。
便利なITによって業務が効率化されたはずなのに、増える単純作業。
この原因と考えられのが、
- システムが増えすぎて、システム間をつなげる余計な作業が生じている
- 上記の理由によりデータの「入力」「コピペ」「加工」作業に時間を取られている
の2つではないでしょうか。
特に経理や総務の間接部門の大部分がこのような作業に追われている、
と考えられます。
単純作業はプログラミングに任せよう
単純作業は、なくさなければいけないと考えています。
その理由のひとつが、
これらの作業(システム間をつなげるための単なる入力や転記、加工編集等)
は本質的な価値がないからです。
価値、というのはお客様(得意先や従業員など)に対してなにか利益があるか、というお話です。
言うならばシステムに振り回された結果生じた仕事なのかなと。
「単純作業だって誰かがやらなければいけないのだし、仕事の1つだ!」
という意見もありますが、
「誰か」ではなく「プログラミング」に任せるのが正解と考えています。
単純作業に人の大切な時間を使うのはもったいないですし、
プログラミングこそ、ルールに沿った単純作業が大の得意だからです。
「作業していた人の空いた時間はどうするんだ!」
というお叱りに関しては、
いやいや日本人はそもそも働きすぎなのだから
遊んで休めば良いと思います。そして余力があれば、
プログラミングの勉強をして、単純作業に苦しめられている他の人を救うことが
できればそれで良いかと。
Pythonとは
今回、Python(パイソン)というプログラミング言語をExcelと組み合わせてコピペ業務を
自動化してみました。
Pythonは、Excelなどのソフトとの連携のほかWebアプリ開発、AI(人工知能)における機械学習分野でも使われている言語で応用範囲が広いのが特徴です。
以前触ったときは、Webアプリケーション(チャットボット)を作りました。
Python×Excelのメリット
システム間をつなげるために、Excelを自動化させることはホワイトカラーにとっては
永遠のテーマです。
Excelを自動化させるには関数を駆使する、マクロ・ExcelVBA、RPAを使う方法もあります。
ただこれらの方法に比べてPython×Excelを組み合わせると以下のメリットがあります。
- 動作が早い
- ライブラリ、拡張機能(便利な機能を集めたもの)が豊富
- Excelのバージョンアップに振り回されない
- WindowsでもMacでも共通して使える
特に下2つが大きいかなと思います。(私はMacユーザーなので)
マクロやVBA、RPAはバージョンやOSによってうまく動作しない場合が多くあるからです。
汎用性の高さ、そして拡張性の高さがPythonの大きな特徴です。
Python×Excelでコピペを効率化する方法
効率化の一歩は小さなことから。ということでPython×Excelで請求書のコピペを効率化してみました。
手順を簡単に紹介します。
Pythonのインストール
Pythonは、以下のページからインストールできます。
ソースコードエディタのインストール
プログラムを書くために、「ソースコードエディタ」というものが必要となります。
(プログラムが書きやすいノートのようなもの)
PythonをインストールするとIDLEというソースコードエディタがついてくるのですが、
使いづらいのでやめたほうが良いです。
お勧めは、Microsoft社が提供している「Visual Studio Code」(VS Code)です。
今まで何個かエディタを使ってきましたが、こちらが一番使いやすいです。
上記のページから無料ダウンロードができます。
VS Codeの拡張機能をインストール
VS CodeにPythonを書き始める前に、下記2つの拡張機能をインストールします。
- Japanese Language Pack for Visual Studio Code・・・日本語に翻訳する拡張機能
- Python Extension for Visual Studio Code・・・VS CodeでPythonを使うために必要な拡張機能
初期画面の左側のブロックのようなアイコンから検索して追加することができます。
ライブラリのインストール
Pythonには、1からコードを書いていくのではなく
すでに便利な機能のコードがまとめられたパッケージ(ライブラリ)が用意されています。
Excelと連携するために便利な機能として、主に次の3つが用意されています。
- xlrd・・・Excelファイルを読むこむライブラリ
- xlwt・・・ファイルに書き込むライブラリ
- openpyxl・・・Excelファイルの読み書きができるライブラリ
これらを順番にインストールしていきます。
VS Code⇒表示⇒ターミナルを開きます。
ターミナル内に、「sudo pip3 install ライブラリ名」と入力し、
エンターキーを押すとインストールを行うことができます。
(ネット接続が前提です。パスワードを聞かれる場合もあります)
↓キャッシュがどうとか、バージョンが古いとか色々警告が出てきますがエラーがなければひとまずOKということで・・。
Rubyなどの言語もそうですが、この文字だらけのターミナル(Windowsではコマンドプロンプトのようなもの)
に慣れるのもPythonを使うコツかもしれません。
コピペ元、コピペ先のExcelブックを準備する
今回業務内容を記載した一覧(コピペ元)と、
請求書テンプレート(コピペ先)
の2つを準備しました。
宛名、業務内容等を請求書テンプレートにコピペして、
新しいファイルとして保存するというプログラムです。
プログラムを書く
VS Codeでプログラムを書いて、「○○(任意の名前).py」とPython形式で保存します。
今回、次のようなCodeを書きました。
from datetime import datetime# ファイル名の指定など
file_list = “sample.xlsx” # 業務内容一覧
file_invoice= “invoice.xlsx” # 請求書のテンプレート
file_out_iv = “send-invoice.xlsx” # 新規に作成する請求書# 業務内容を読み込む
wb = openpyxl.load_workbook(file_list, data_only=True) # 値を取り出す
ws = wb[“sheet1”] # sheet1を選ぶ
name = ws[“A1”].value # 宛名を得る
list_data = ws[“A3:E10”] # 任意の範囲を取得# 請求書のテンプレートを読む
wb_iv = openpyxl.load_workbook(file_invoice)
ws_iv = wb_iv.active# 取引先名と日付を書き込む
cdate = datetime.now().strftime(“%Y/%m/%d”)
ws_iv[“B2”].value = name
ws_iv[“G2”].value = cdate# 業務内容をコピペする
for y, row in enumerate(list_data):
for x, cell in enumerate(row):
if (cell is None) or (cell.value is None): continue
v = cell.value
ws_iv.cell(row=14+y+1, column=0+x+2, value=v)# 請求書を新規に保存する
wb_iv.save(file_out_iv)print(“作成完了”)
from datetime import datetime
PythonでExcelファイルの読み書きができるライブラリであるopenpyxl、
リストや辞書などきれいに整形して出力・表示するライブラリpprint、
日付、時刻を正しく扱うdatetimeモジュール(datetime型)をインポートします。
file_list = “sample.xlsx” # 業務内容一覧
file_invoice= “invoice.xlsx” # 請求書のテンプレート
file_out_iv = “send-invoice.xlsx” # 新規に作成する請求書
コピペ元、コピペ先、新規作成ファイル名をそれぞれ変数に格納します。
wb = openpyxl.load_workbook(file_list, data_only=True) # 値を取り出す
ws = wb[“sheet1”] # sheet1を選ぶ
name = ws[“A1”].value # 宛名を得る
list_data = ws[“A3:E10”] # 任意の範囲を取得
wb = openpyxl.load_workbook(file_list, data_only=True)
で、file_list(業務内容が記載されているExcelファイル)を読み込みます。
data_only=Trueで値だけ取得することが可能です。
後は、コピペ元の任意の範囲を取得します。
wb_iv = openpyxl.load_workbook(file_invoice)
ws_iv = wb_iv.active
請求書のテンプレートを読込み、アクティブになっているワークシートを得ます。
cdate = datetime.now().strftime(“%Y/%m/%d”)
ws_iv[“B2”].value = name
ws_iv[“G2”].value = cdate
cdate = datetime.now().strftime(“%Y/%m/%d”)
現在の時間を指定した日付フォーマットに変換し、変数cdateに格納しています。
ws_iv[“B2”].value = name
ws_iv[“G2”].value = cdate
それぞれ、請求書テンプレートの必要箇所にコピペしています。
for y, row in enumerate(list_data):
for x, cell in enumerate(row):
if (cell is None) or (cell.value is None): continue
v = cell.value
ws_iv.cell(row=14+y+1, column=0+x+2, value=v)
for文を用いて、
list_data(業務内容)から請求書テンプレートへコピペを行っています。
rowの14はコピペする業務内容の開始行、columnの2は開始列となります。
wb_iv.save(file_out_iv)print(“作成完了”)
コピペした請求書を保存して、最後にターミナルに「作成完了」と表示しています。
↓地味ですが、動画作りました。
内容がコピペされ、ターミナルに「作成完了」と表示され、send-invoiceが自動的に作成されています。
今回のコードは、こちらのページを参考にさせていただきました。
ゼロからはじめるPython(37) PythonでExcelファイルに自動入力 | TECH+
また、Pythonの導入や基礎的なことは下記の本で復習しました。
コピペ以外にもExcelの加工やグラフ作成の自動化など実務にすぐ役立つ内容ばかりです。
Python×Excelの始めの一歩におすすめです。
Python×Excel効率化の所感
導入のハードルは少し高め
今までExcelの自動化はExcelマクロ、ExcelVBA、RPA(UiPath)を使ったことがありましたが
それに比べるとPythonの導入のハードルは少し高めかなと感じました。
UiPathのように視覚的に行うことができないので、
すべてプログラムをエディタに入力しなければならず
変数、繰り返しなどのプログラミングの基礎知識は必要と感じました。
ターミナルの操作も慣れるまでは大変かもしれません。
処理スピードが早い
処理が早いなと感じました。
VS Codeから実行(Ctrl+F5)すれば、瞬時に実行してくれるので
テストがしやすいと感じました。
可能性を感じる
最初の特徴のところで説明しましたが、
Pythonは汎用性があり、応用範囲が広いのが特徴です。
特にAI、機械学習にも使えるということで
人気のあるトレンド言語ということも納得です。
今後スキルをつけて年収をアップしたい、という人であれば
Python、オススメかもしれません。
まとめ
Python×Excelで面倒な業務を効率化(まずはコピペ業務)ということで紹介しました。
「コピペ一つできたところで・・」
と思うかもしれませんが、これらの小さな積み重ねが
日々の時間の蓄積になっていきます。
今回は単なるコピペでしたが、PDFにして電子メール送付、
も応用としてできそうです。
今後もPython×Excelは色々と試していきます。
編集後記
金曜日は、臨時の仕事含めなんとか一段落。
夜はお客様からのお誘いでZOOM飲み会に参加。
事前にワインを送ってくださったり、
ZOOMの中でゲーム(イラストしりとりなど)
を企画してくださったり、とても楽しめました。
最近のあたらしいこと
スタバのモバイルアプリ