Pythonを使うとエクセル関数を作成することができます。
ここではPython×Excelの入門事例として、sum関数を作っていきます。
・Excelでsum関数をプログラムで作成
それでは以下で詳しく紹介していきます。
目次
PythonでExcelのSUM関数を作ってみる
今回は以下の作業をpythonで行います。
セルC2~セルC21の数値の合計をセルG2に出力
Excel関数でいえば、「=sum(C2:C21)」とすれば、合計値を出力することができます。
しかしopenpyxlというpythonライブラリを使ったら、どのようにプログラムを作ればいいのでしょうか。
本記事では、そのプログラム作成について詳しく紹介していきます。
Pythonプログラムの実行前準備|Excelファイル保管とライブラリインストール
1. Excelファイルを準備
2. 必要なライブラリをインストール
準備1|Excelファイルをフォルダに保存(「.py」と同じフォルダ)
対象となるExcelファイルをフォルダに保存します。
Pythonファイル「.py」と同じフォルダにExcelを保存すること
本事例では「Sample.xlsx」というファイル名にしています。
後半で紹介するプログラムをそのまま使用する場合は、「.py」と「.xlsx」が同じフォルダでないとエラーが発生します。
準備2|必要なライブラリをインストール
今回は以下の2つのライブラリをインストールします。
pip install openpyxl
Excelを操作するために使用するライブラリです。
上記をインストールしておかないと動かないので、注意が必要です。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# プログラム1|ライブラリ設定 import openpyxl as px # プログラム2|対象のエクセルシートを読み込む filepath = 'Sample.xlsx' wb = px.load_workbook(filename=filepath) ws1 = wb['Sheet1'] # プログラム3|最終行の取得 cmax1 = ws1.max_row # プログラム4|計算用の変数goukeiを作成 goukei = 0 # プログラム5|所定範囲の数値を計算 for i in range(2, cmax1+1): kingaku = ws1['C' + str(i)].value goukei += kingaku # プログラム6|合計値をセルG2に出力 ws1['G2'].value = goukei # プログラム7|エクセルファイルを「Sample1.xlsx」として保存 wb.save('Sample1.xlsx') |
以下で詳しく説明しています。
プログラム1|ライブラリの設定
1 2 |
# プログラム1|ライブラリの設定 import openpyxl as px |
openpyxlはExcel操作で使います。
「openpyxl as px」とすることで、openpyxlをpxという変数で扱うようにしています。
プログラム2|対象のエクセルシートを読み込む
1 2 3 4 |
# プログラム2|対象のエクセルシートを開く filepath = 'Sample.xlsx' wb = px.load_workbook(filename=filepath) ws1 = wb['Sheet1'] |
以下で一行ずつプログラムを解説します
プログラム解説
2 |
filepath = 'Sample.xlsx' |
「.py」ファイルと同じフォルダ内の「Sample.xlsx」を変数filepathとします。
3 |
wb = px.load_workbook(filename=filepath) |
filepath(‘Sample.xlsx’)で指定したExcelファイルを読み込みます。
所定フォルダに「Sample.xlsx」が存在しない場合、エラーとなりますので注意が必要です。
4 |
ws1 = wb['Sheet1'] |
読み込んだExcelファイルの「Sheet1」をws1として扱います。
なお読み込んだExcelに「Sheet1」が存在しない場合、エラーとなりますので注意が必要です。
シート名にも気を付けましょう。
プログラム3|最終行の取得
1 2 |
# プログラム3|最終行の取得 cmax1 = ws1.max_row |
「sheet.max_row」で最終行を取得することができます。
この事例では、ws1(Sheet1)の最終行は21です。
1 2 |
cmax1 = ws1.max_row print(cmax1) |
実行結果
1 |
>>>21 |
ここで取得した最終行までC列の数値を計算していきます。
プログラム4|計算用の変数goukeiを作成
1 2 |
# プログラム4|計算用の変数goukeiを作成 goukei = 0 |
変数goukeiを0となります。
このgoukeiという変数にC列の数値を計算(合計)していきます。
プログラム5|所定範囲の数値を計算
1 2 3 4 |
# プログラム5|所定範囲の数値を計算 for i in range(2, cmax1+1): kingaku = ws1['C' + str(i)].value goukei = goukei + kingaku |
プログラム解説
以下で一行ずつプログラムを解説します
2 |
for i in range(2, cmax1+1): |
「range(2, cmax1+1)」で「2からcmax1」まで繰り返し処理を行います。
3 |
kingaku = ws1['C' + str(i)].value |
変数kingakuにSheet1のセルCi(i=2,3,…,cmax1)を入れていきます。
1 2 3 |
for i in range(2, cmax1+1): kingaku = ws1['C' + str(i)].value print(i, ws1['C' + str(i)].coordinate, kingaku) |
「ws1[‘C’ + str(i)].coordinate」でセルのアドレスを取得します
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>>>2 C2 -26845 >>>3 C3 15973 >>>4 C4 -1660 >>>5 C5 3152 >>>6 C6 5884 >>>7 C7 -74000 >>>8 C8 2000 >>>9 C9 -14000 >>>10 C10 3000 >>>11 C11 68000 >>>12 C12 -12000 >>>13 C13 -2000 >>>14 C14 223 >>>15 C15 -4000 >>>16 C16 12000 >>>17 C17 366012 >>>18 C18 -60858 >>>19 C19 -14024 >>>20 C20 210000 >>>21 C21 3188 |
このときstr(i)にしておかないとエラーとなります。
「ws1[‘C’ + i].value」ではiがint型のため、正しく処理されません。
4 |
goukei = goukei + kingaku |
goukei(プログラム3)にkingakuの値を加算していきます。
なお「goukei += kingaku」としても同様の処理を行うことができます。
好きな書き方を選択していただければよいです。
プログラム6|合計値をセルG2に出力
1 2 |
# プログラム6|合計値をセルG2に出力 ws1['G2'].value = goukei |
プログラム5で合計したgoukeiをセルG2に出力します。
プログラム7|エクセルファイルを「Sample1.xlsx」として保存
1 2 |
# プログラム7|エクセルファイルを「Sample1.xlsx」として保存 wb.save('Sample1.xlsx') |
「Sample.xlsx」を「Sample1.xlsx」としてエクセルを保存します。
エクセルファイルの保存先は「.py」ファイルと同じフォルダに保存されます。
Pythonプログラム解説(関数式をそのまま入力する方法)
Pythonのopenpyxlを使ったsum関数の表現方法は別にもあります。
ここでは「=sum()」を直接入力する方法も紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# プログラム1|ライブラリ設定 import openpyxl as px # プログラム2|対象のエクセルシートを開く filepath = 'Sample.xlsx' wb = px.load_workbook(filename=filepath) ws1 = wb['Sheet1'] # プログラム3|最終行の取得 cmax1 = ws1.max_row # プログラム4|関数式をセルG2に出力 sum_kansu = '=sum(C2:C' + str(cmax1) + ')' ws1['G2'].value = sum_kansu # プログラム5|エクセルファイルを「Sample1.xlsx」として保存 wb.save('Sample1.xlsx') |
プログラム1、プログラム2、プログラム3、プログラム5は上記で説明済みなので、省略します。
プログラム4についてのみ詳細を紹介していきます。
プログラム4|関数式をセルG2に出力
1 2 3 |
# プログラム4|合計値をセルG2に出力 sum_kansu = '=sum(C2:C' + str(cmax1) + ')' ws1['G2'].value = sum_kansu |
プログラム解説
以下で一行ずつプログラムを解説します
2 |
sum_kansu = '=sum(C2:C' + str(cmax1) + ')' |
「sum_kansu」という変数に「’=sum(C2:C’ + str(cmax1) + ‘)’」を入れ込みます。
要はセルに関数をそのまま入力するのです。
以下でプログラムを実行してみます。
1 2 3 |
cmax1 = ws1.max_row sum_kansu = '=sum(C2:C' + str(cmax1) + ')' print(sum_kansu) |
実行結果
1 |
>>>=sum(C2:C21) |
これで、sum_kansuを「=sum(C2:C21)」とできます。
3 |
ws1['G2'].value = sum_kansu |
このように関数をそのままExcelのセルに入れ込む方法もあります。
sum関数を実現するだけなら、このやり方でも問題ありません。
関数式を入力するのはオススメしない理由
関数式を入力すれば、Excel関数を作成することはできるかもしれません。
しかしながら関数式をそのまま入力する方法はオススメしません。
なぜなら関数式をそのまま入力するなら、pythonでやる必要がないからです。
pythonを使うメリットは、他のライブラリと組み合わせて、関数では出来ないようなことを実現することにあります。
たとえばウェブスクレイピングをして、Excelに出力していくといった効率化をすることがpythonを使う魅力です。
しかし関数式を入力することで対応していたら、pythonを使うための基礎的な理解が進みません。
pythonを使うなら、せっかくなので、関数式に頼らずにプログラムを書けるようになってほしい。
そのような思いで、前半部分でsum関数の内容をsum関数を使わないでプログラムで記述方法を紹介しました。
pythonを使うなら、関数式にはとどまらず少し難しいことに挑戦していただければ嬉しいです。
実際に、以下でPythonの自動化プログラムを紹介しています。
どれも魅力的なプログラムなので、ぜひご覧いただきたいです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Python×効率化のサンプル
Pythonで効率化できる事例をサンプルコード付きで紹介しています。
Python×Excel
PythonとExcelで自動化できることを紹介しています。
事例も数多く紹介しているので、ぜひ参考にしてみてください。
Pythonって難しい?
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。