Excelの作業内容を自動化することで業務を効率化でき、生産性が上がります。本記事では、PythonでExcel操作を自動化する方法について解説します。
さまざまな企業で使用されているExcelの業務は、ほぼ定型化した単純なものです。Excelの作業を自動化することで、業務の効率化を図れます。そのために必要なのがPythonです。
本記事では「PythonでExcel操作を自動化する方法が知りたい」「Excel業務を効率化して生産性を上げたい」という方に向けて、PythonでExcel操作を自動化する方法を解説します。
目次
ここでは、PythonによるExcelの自動化とは何かを説明します。
Excelは現在、企業などにおける日々の業務でよく使用されており、ビジネスにおいては必需品です。表計算ソフトは会計業務などにおける計算や、経営戦略の立案などに活用するためのデータの可視化に使われます。
しかし、Excelはそうした計算やデータの可視化にはとどまらず、書類のフォーマットや勤怠管理など、さまざまな場面で業務に活用されているのです。
事務的な作業は、単純作業の繰り返しになる場合が多いため、人が手動で操作するよりも、プログラムによって自動的に処理させるほうが、はるかに速くミスのない作業が実現できます。そのため、プログラミング言語のPythonでExcel操作を自動化することにより、人間の手による業務を効率化でき、事務作業などのコストを大きく削減することが可能になります。
Excelを自動化させる場合に使用するプログラミング言語は、Pythonだけではありません。Excelにはマクロという自動化を行うための機能があり、VBAというプログラミング言語による実装も可能です。
Pythonによる自動化を選択する理由は、以下の4つです。
以下、解説していきます。
Pythonを使って自動化を行うと、OSの環境に左右されません。
Excelを自動化させる方法であるExcelVBAを使う場合は、OSやバージョンによる違いを考慮する必要があります。使っているOSがWindowsかMacかの違いによって、そのままプログラムを移植すると動かないという互換性の問題が発生することがあります。
一方でPythonは、プログラムのコードの書き方にOSによる違いがないため、Excelを自動化する際に、環境の違いを考慮しなくてよいのです。
Pythonはさまざまな分野で利用されているプログラミング言語ですので、応用の範囲が広いといった特徴があります。Excelに限らず、他のアプリやブラウザなどの自動化にも使えます。
たとえば、クリックやスクロール、文字入力などのブラウザの操作を、人間が手動でマウスやキーボードなどを使って行う代わりに、プログラムに行わせることが可能です。
Webサイトで検索を行い、その結果を取得させることで情報を収集したり、翻訳を自動化したり、さまざなことができます。メールを自動配信させることも可能です。WordといったExcel以外のMicrosoft Officeアプリでの操作を自動化することもできるのです。
このようにPythonによる自動化は、Excelだけではなく幅広いツールに応用が利くことがメリットといえるでしょう。
Pythonは、科学技術計算に使われているプログラミング言語であることから、使用できる関数が豊富にあります。たとえば、Pythonに標準で入っている数学モジュールにより、円周率を使用できます。
さらに、Excel操作を自動化するためのライブラリの機能により、セルにExcel関数を書き込むことも可能です。そのため、Pythonの関数とExcel関数を柔軟に組み合わせる使い方もできます。
Pythonはコードが読みやすいプログラミング言語であるため、比較的、学習しやすい言語です。さらに、ライブラリやフレームワークが充実しているため、Pythonの応用範囲は幅広く、統計解析や機械学習(人工知能)などのデータサイエンス分野で使われているほか、Webアプリなどにも使用されています。
Python以外のExcel業務を効率化させる言語、たとえばVBAと比べても、Pythonのほうが将来性があるといえます。こうしたプログラミング言語自体の将来性という観点からも、PythonでのExcel業務の効率化を導入することにはメリットがあるのです。
PythonでExcelを自動化することにはメリットが多いですが、いくつかのデメリットもあります。ここでは、PythonでのExcel自動化の導入を検討するにあたり、知っておきたいデメリット・注意点を紹介します。
デメリットは導入のためのハードルや、PythonによるExcel自動化が得意でないことに関するもので、具体的には以下の3つです。
それぞれ詳しく解説します。
PythonでのExcel自動化を導入する際には、はじめにPythonを使うための環境構築に時間や労力が必要です。企業によっては、パソコンにソフトウェアをインストールする際に、システム部門などから許可を得なければならない場合もあります。
Pythonそのものだけでなく、Pythonでのプログラム開発を行うためのテキストエディタや統合開発環境(IDE)も用意したいところです。また、Excel自動化のためのPythonライブラリをインストールするためには、パッケージマネージャーをインストールする必要があります。
このように、Pythonを使うための環境構築には時間がかかる上に複雑な作業が生じてしまうのです。
そもそも、Pythonについての知識や技術がない場合は、PythonでExcel自動化を行うことはできません。そのため、自動化業務を担当する予定の部署にPython経験者がいない場合は、通常の業務のほかに、Pythonを学習する機会を設ける必要があります。
プログラミングの基本的な知識や考え方、Pythonにおける文法・コードの書き方や実行の方法などの基礎を習得した上で、Excelを自動化するためのライブラリの使い方を一通り学ばなくてはいけません。
したがって、Pythonを理解しプログラミングできる技術者がいない場合は、PythonによるExcel自動化導入のための学習コストが発生します。
PythonによるExcelの自動化が可能なのは、決まったパターンの作業が繰り返される業務です。反復作業や決まりきったタスクではない、イレギュラーな処理が必要な場合は、PythonによるExcel自動化では対応できません。
PythonによるExcel自動化は、普段から日常的に、あるいは定期的に行うタスクに対して最も力を発揮します。一回限りしか行われない業務に対しては自動化を実装するコストの観点から、PythonによるExcel自動化は非効率です。
PythonでExcelを自動化するためにはPythonを使用できる環境に加え、PythonからExcelの操作を行うためのライブラリが必要です。
ここでは、以下の2つのライブラリについて説明します。
「OpenPyXL」はPythonからExcelファイル(主に拡張子が.xlsxのファイル)を読み込んで編集できるライブラリです。
PythonからExcelのセルの値を取得したり、書き換えたりできます。また、新たにExcelファイルを作成することも可能です。複数のブック(Excelファイルのこと)を読み込めるので、Excelファイル同士で数値などの内部データを交換することもできます。
OpenPyXLは、あくまでExcelのファイルを操作するライブラリなので、Excelのアプリケーションが使えない環境でも、OpenPyXLを使用できる特徴があります。
「xlwings」はPythonのプログラムからExcelのファイルに接続して操作したり、Excelのワークブックを直接起動したりできるライブラリです。
Excel側からxlwingsを使用したPythonプログラムを呼び出すこともできます。この機能により、呼び出し元のExcelブックのセル操作などを自動的に行えます。また、xlwingsではPython側からExcelのマクロを呼び出すことも可能です。
VBAもプログラムからExcelを開くことができたり、Excel側からVBAで書かれたプログラムを呼び出して実行できたりするため、xlwingsはVBAに似た使用感のライブラリです。
さらに、xlwingsはExcelそのものを使うライブラリであるため、xlwingsを使うことでExcelとの高い互換性が期待できます。
ここからはOpenPyXLをインストールする手順を解説します。
OpenPyXLのインストールには、pipを使用します。pipは、The Python Package Indexに公開されているPythonパッケージのインストールなどを管理するためのコマンドです。
ターミナルなどで次のようなコマンドを入力して実行します。
$ pip install openpyxl
もしも、利用している環境でPython2とPython3が混在している場合は、pip3というコマンドを使います。
$ pip3 install openpyxl
また、Python環境をAnacondaで構築していて、OpenPyXLがインストールされていない場合は、次のコマンドで入れます。
$ conda install -c anaconda openpyxl
ここからは、OpenPyXLを使ってExcelのファイルをPythonで読み込む方法について解説します。
すでに存在するExcelのファイルを読み込むには、以下のように記述します。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx')
1行目は、OpenPyXLパッケージから事前に用意しておいたExcelファイルを読み込むためにload_workbookという関数をインポートするための記述です。2行目は、Excelファイル「mybook.xlsx」を引数として指定してload_worbook関数を呼び出し、wbという変数に代入しています。
この書き方だと、ExcelファイルとPythonを実行させるディレクトリが一致している必要があります。ExcelファイルとPythonを実行させるディレクトリが異なる場合は、ファイル名の部分でパスを指定する必要がある点に注意してください。
ここからは、Excel側でセルに入力した記号や数値をPython側で取得する方法について解説します。
Excelファイル「mybook.xlsx」のシートの名前を「MySheet1」に変更し、そのシートのA1セルに、たとえば「Hello」といった任意のテキストを入力しておいてください。
そして、Pythonファイルに以下のコードを追記します。
mysheet = wb['MySheet1'] print(mysheet['A1'].value)
仮にPythonファイルのファイル名が「booktest.py」だったとして、次のように実行すると、「Hello」と出力されます。
$ python booktest.py Hello
このコードでは、Excelファイル内の「MySheet1」というシートをPythonの「mysheet」という変数に格納しています。さらに、最後の行でA1セルの値を取得し、print関数によって標準出力させています。
ここではExcelの行・列をPythonで取得するデータ取得方法について解説します。
次のようなコードで、Excelの行や列のデータをPythonで出力できます。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mycol = mysheet['B'] for cell in mycol: print(cell.value) myrow = mysheet[1] for cell in myrow: print(cell.value)
この例では、前半部分でシートの第B列を取得して変数「mycol」に代入し、forループで各セルの値を出力しています。後半部分は、第2行を取得して「myrow」に代入し、ループによりセルの値を出力させるコードです。
あらかじめセルに出力したい値を入力しておくことで、Pythonの出力と一致することを確認できます。
ここからはExcelシート内のすべてのデータを取得する方法について解説します。
以下のコードは、シート内の記入されたすべてのセルのデータをPythonで出力させるものです。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mycols = mysheet.columns for cells in mycols: for cell in cells: print(cell.value)
シート全体のデータを列の集まりとして取得し、変数「mycols」に格納します。続く二重ループ文で、mycols内の各列に対して、その列内のセルごとに値を標準出力させています。
ここからは、PythonからOpenPyXLでExcelのファイルにデータを書き込む方法について解説します。セルに記号や数値を入力したり、Excel側で計算を行うための数式を入力したりすることが可能です。
PythonからExcel内のセルへの記号や数値の書き込み方法を解説します。
Excelのセルに書き込むPythonのコード例は、以下です。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mysheet['A2'].value='Hi Python' mysheet['A3'].value=10 wb.save(filename = 'mybook.xlsx')
まず、A2およびA3の番地にあるセルに、「Hi Python」という文字列と「10」という数値を入力しています。
この変更は、実行中のPythonプログラム内でのワークブックオブジェクトであるwbに対して行われたものなので、実際のExcelファイルに反映させるために、「mybook.xlsx」ファイルを上書き保存しています。
このファイルをExcelから開くと、実際にセルにこれらの値が入っていることの確認が可能です。
セルに数式を書き込むコードの例は、以下です。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mysheet['D1']='=SUM(C1:C3) + 10' mysheet['D2']='=2*PI()' wb.save(filename = 'mybook.xlsx')
あらかじめExcelのセルのC列に、上から順にたとえば1、2、3と数値を入力しておき、このプログラムを実行すると、D1のセルに36、D2には6.28…という数値が入ります。
セルに入力しているのはPython内ではあくまで普通の文字列ですが、Excelで使う関数や数式を入力することによって、Excelで開いたときには計算が行われる仕組みです。
Excelファイルにおけるセルの見た目の形式をPythonから操作することもできます。
ここでは、以下の3つについて解説します。
Excelのセルを結合・解除する方法を解説します。
セルの結合の操作が実行できるコードの例は、以下です。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mysheet.merge_cells('A1:C1') wb.save(filename = 'mybook.xlsx')
A1からC1までのセルを、「merge_cells」という関数を使い一つに結合し、Excelに反映させるためにファイルを上書き保存しています。結合されたセルを解除する場合に使う関数は「unmerge_cells」です。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mysheet.unmerge_cells('A1:C1') wb.save(filename = 'mybook.xlsx')
これでセルの結合が解除されます。
行の高さと列の幅を変える方法を解説します。
行の高さと列の幅を変えるコードの例は、以下です。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] mysheet.row_dimensions[1].height = 20 mysheet.column_dimensions['A'].width = 20 wb.save(filename = 'mybook.xlsx')
ワークシートの1行目に対して、height属性を20に指定することで、高さを変更できます。列についても同様に、A列目の幅を、width属性を指定することで変更が可能です。
セルに罫線を引く方法を解説します。罫線を引くコードは以下です。
from openpyxl import load_workbook from openpyxl.styles import Border, Side wb = load_workbook(filename = 'mybook.xlsx') mysheet = wb['MySheet1'] bd = Side(style='thin', color="000000") border = Border(left=bd, top=bd, right=bd, bottom=bd) mysheet['A1'].border = border wb.save(filename = 'mybook.xlsx')
セルの外枠を指定するためのBorderとSideという関数を新たにインポートしています。各辺に細めの黒い実線を引く設定を変数「border」に代入し、A1の位置のセルにその設定を反映させています。
PythonとOpenPyXLライブラリによるExcel自動操作の活用方法を紹介します。
ここで紹介するのは、以下の2つです。
データを集計する方法について、以下のコードを例に解説します。
from openpyxl import load_workbook wb = load_workbook(filename = 'mybook.xlsx') datasheet = wb['Data'] resultsheet = wb['Result1'] startday = resultsheet['B1'].value endday = resultsheet['B2'].value rowend = datasheet.max_row print(rowend) goukei = 0 for i in range(2,rowend): if startday <= datasheet.cell(row=i,column=2).value <= endday: goukei += datasheet.cell(row=i,column=3).value print(int(goukei)) print(goukei/(rowend-1)) resultsheet.cell(row=6,column=1).value=goukei resultsheet.cell(row=6,column=2).value=goukei/(rowend-1) wb.save(filename = 'mybook.xlsx')
新しく、「Data」と「Result1」というシートを用意し、データが入力されていることを想定しています。Dataの方は取引のデータを記載していて、A列に取引の番号、B列に日付、C列に売上金額が入力されています。
Result1のシートは、ある期間の合計金額と、平均して一件あたりいくらの金額になっているかを記録するためのものです。Results1のB1とB2に、あらかじめ、集計期間の開始日と終了日の日付を2022/11/01などの形で入力しておきます。
データは2行目から記載されているものとして、ループ文により2行目からシート内にデータが入力されているセルの最大の行番号まで処理させています。日付が期間内であるかを判定して、期間内ならば合計金額に売上金額が計上され、期間外なら計上されません。合計と、合計を件数で割り算した平均金額を、それぞれ6行目の1列目と2列目(つまりA6とB6)に入力しています。
データを集計する方法について、以下のコードを例に解説します。
from datetime import date from openpyxl import load_workbook from openpyxl.chart import ( LineChart, Reference, ) from openpyxl.chart.axis import DateAxis wb = load_workbook(filename = 'mybook.xlsx') ws = wb['MySheet2'] rows = [ ['No.', 'Date', 'Income'], [1, date(2022,11, 1), 20000], [2, date(2022,11, 2), 2800], [3, date(2022,11, 3), 5000], [4, date(2022,11, 4), 10000], [5, date(2022,11, 5), 7500], [6, date(2022,11, 6), 1200] ] for row in rows: ws.append(row) c1 = LineChart() c1.title = '売上推移' c1.style = 13 c1.y_axis.title = '売上' c1.x_axis.title = '日付' data = Reference(ws, min_col=3, min_row=1, max_col=3, max_row=7) c1.add_data(data, titles_from_data=True) dates = Reference(ws, min_col=2, min_row=2, max_row=7) c1.set_categories(dates) s1 = c1.series[0] s1.smooth = True ws.add_chart(c1, 'A12') wb.save("mybook.xlsx")
まず、取引番号と日付、金額の入ったデータを作成しています。それをLineChartにより線グラフ化しています。データ範囲をReferenceによって指定していて、グラフにプロットするための縦軸のデータを与えているのが「data」で、横軸のデータを与えているのが「dates」です。
グラフのタイトルを「売上推移」、縦軸名を「売上」、横軸を「日付」と指定し、滑らかな線グラフをプロットしています。
Pythonを活用してExcel自動化を導入するにはいくつかのメリットとデメリットがあります。
その中でもPythonは将来性があるプログラミング言語であり、環境の違いを気にせずにExcelを自動化できるなど、メリットは大きいです。
数値や文字などのデータを操作できるだけでなく、セルの見た目や形式を操作でき、計算やグラフ作成も自動化が可能です。ぜひPythonを、日々のExcel業務の効率化に活用してください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール