「openpyxl」でセル名と行列番号を変換してみよう

※社外のコラムニストによる寄稿です。Pythonに関する情報をお届けします。

「シゴトがはかどるPython自動処理の教科書(著:クジラ飛行机様/マイナビ出版)」を利用して、Pythonを使った自動化について学んでいきます。

前回は、Chapter2-5 に入り、Excelシートを連続で読み込む方法3点学びました。
今回は、「openpyxl」でセル名と行列番号の変換についてご紹介します。

セル名と、行列番号、どちらを指定するのがいいか

前回学んだとき、取り出したい情報があるセルを指定する方法としては、セル名を直接指定するか、行・列の番号を指定するかのいずれかの方法が用いられていました。

どちらの方法でセルを指定するかは、処理したい内容によって変えることになりますが、まずはそれぞれのメリットとデメリットについて考えてみます。

①セル名を指定する
メリット :Excelで見えているまま指定できるので、視覚的にわかりやすく、コードも直感的に読みやすい
デメリット:セル名は文字列のため、ループや動的な処理に不向き(列を計算できるよう、数値に変換しなくてはならない)

②行・列番号を指定する
メリット :数値で扱えるため、繰り返し処理がしやすく、リストや配列などの他のデータ構造への対応がしやすい
デメリット:コード上ではどのセルを指定されているか分かりにくい

このように整理できるかと思います。

ならば、セル名から行列番号へ変換する、もしくは、行列番号からセル名に変換するということがプログラム内で行われればとっても便利です。

というわけで、まずはその方法について学びます。

1.セル名から行列番号を取得する方法


P.67
まず、セル名から行番号と列番号を得るには、次のようにします。セル名からセルのオブジェクトを取得し、rowプロパティに行番号が、columnプロパティに列番号が入っています。

セル名から行番号と列番号を取得する方法


行列番号が表示される時は1から始まることになりますので、例えばB3は行:3、列:2という結果になります。

2.行列番号からセル名を取得する方法

逆バージョンです。


P.67
行番号と列番号からセル名を得る方法を見てみましょう。cellメソッドでセルのオブジェクトを取得したら、そのcoordinateプロパティからセル名を得ることができます。
行番号と列番号からセル名を取得する方法


coordinateは、行・列番号が分かっている場合にセル名を返してくれるものです。
なので、[row=1, column=3]となっていれば、C1だと答えを返してくれます。

ところで、列番号だけ知りたいんだよねというケースもあるかもしれません。
そうした時には、openpyxlのユーティリティ関数である[get_column_letter()]を使うことで可能になるそうです。
この関数は、列番号(1, 2, 3, ...)を、Excel の列記号('A', 'B', 'C', ...)に変換してくれるため、ループ処理や列操作の時に役立てることができるとのこと。 具体的には次のように書けばいいそうです。

逆に列番号がBというのがわかっていた場合、数値に変換する方法もあります。
同じユーティリティ関数の中にある[column_index_from_string()]を使うことで可能になります。

<変換まとめ>

関数名役割
get_column_letter(番号)列番号 を 列記号 に変換(数値→文字列)
column_index_from_string("文字列")列記号 を 列番号 に変換(文字列→数値)

実験

というわけで、サンプルコードにget_column_letter関数に関係する部分を追記して実際に動かしてみます。

問題なく結果が表示されました。

それではきりが良いのでこちらで終了です。今回もお付き合いいただき、ありがとうございました。
次回からChapter2-6「Excelシートのデータ抽出テクニック」に入ります。

Pythonの自動化で業務の効率化を図りたい方は、グローバルウェイに依頼してみてはいかがでしょうか?興味がある方は以下をご覧の上、是非お問い合わせください。

Pythonによる業務の自動化ソリューション

このページではPythonを活用した業務の自動化ソリューションをご紹介します。 目次お客様の課題日本企業の雑務の平均時間は業務の自動化を採用するメリット当社のPythonに…