Pythonの「openpyxl」を使って 最終行・最終列を取得 したいと考えたことはありませんか?

・Pythonのopenpyxlを使用してExcelを操作してみたい!
・openpyxlで最終行・最終列はどうやって取得できるの?
・「max_row」「max_column」だと余分なものまで取得されちゃう?



この記事では、Pythonでエクセルを操作できるライブラリ
「openpyxl」を使用し、最終行・最終列を適切に取得する方法を
わかりやすく解説します。
Pythonのopenpyxlを使って最終行・最終列を正確に取得できれば、以下のような業務も高速化できますよ!
- 売上データの月次集計 : 最終行を取得して売上合計や平均を算出。
- 顧客リストの最新データ抽出 : 最終列を活用して最新の顧客情報を取得。
- 在庫管理のリアルタイム更新 : 最終行を基に在庫数をリアルタイムで更新。
この記事ではコピペすれば、すぐに使えるコード例とともに、実践的な使い方を紹介しますよ。
さっそく一緒に見ていきましょう!😊
よく使う度 | |
難しさ | |
覚えておくと安心度 |
Pythonをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのPython講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるPython講座はこちら /
この記事でできるようになること
- Pythonのopenpyxlを使用して最終行・最終列を取得する準備を行う
- openpyxlを使用して最終行・最終列を取得する方法を習得する
- openpyxlで最終行・最終列を取得する際の注意ポイントを確認する
- openpyxlで最終行・最終列を取得した使用例を確認する
Python openpyxlでExcelファイルを読み込む方法を解説
まずは、Pythonのopenpyxlを使用して、Excelファイルを読み込む操作を解説します。
以下の手順で準備を行いましょう。
Pythonでopenpyxlをインストールする方法
まずは、openpyxlをインストールしましょう。
以下のコマンドをターミナルやコマンドプロンプトで実行してください。
すでにインストール済みの場合は、次のインストールはスキップすることが可能です。
すでにインストールしているか分からない? そんな時の確認方法はこちら
「すでにインストールしているか分からない…」という方は、
以下のコマンドを使って、インストール状況を確認できます。
すべてのインストール済みパッケージを確認
以下のコマンドをターミナルやコマンドプロンプトで実行してください。
openpyxl が一覧に表示されていれば、インストールされています。
pip list
openpyxlがインストールされているか個別に確認
または以下のコマンドをターミナルやコマンドプロンプトで実行してください。
個別で、openpyxlのバージョンなど詳細情報を確認をすることができます。
pip show openpyxl
pip install openpyxl


これで準備が完了です。
それでは、PythonでExcelファイルの読み込みを実行してみましょう。
Excelファイルの読み込み方法
ExcelファイルをPythonで操作するには、まずファイルを読み込む必要があります。
以下のコードを使って、Excelファイルを読み込み、最初のシートからセルの値を取得してみましょう。
- 今回は
read_excel.py
というファイルに、このコードを記述しました。 - 読み込むエクセル
sample.xlsx
はコードと同じディレクトリに配置してください。
別の場所に保存している場合は、r'C:/path/to/your/sample.xlsx'
のようにraw文字列を使用してフルパスを指定しましょう。


サンプルコード : read_excel.py
import openpyxl
# Excelファイルを読み込む
wb = openpyxl.load_workbook('sample.xlsx')
# 最初のシートを選択
sheet = wb.active
# セルの値を取得
print(sheet['A1'].value)
load_workbook()
でExcelファイルを読み込みwb.active
でアクティブなシートを取得sheet['A1'].value
でA1セルの値を取得
実行結果


Python openpyxlで最終行・最終列を取得する方法をわかりやすく解説!
openpyxlでは、以下のコードで最終行・最終列を取得することができます。
【 最終行・最終列の取得方法 】
さらに詳細な仕様については、openpyxl公式ドキュメントを参照してください。
最終行を取得する方法【ws.max_row】


last_row = ws.max_row
このように記述することで、変数「last_row」に最終行を取得することができます。
- 空白や書式の設定を実施している行まで含んだものを、「最大の行番号」として返します。
- データが途中で途切れていても、最後に何かが入力されていればその行までカウントされます。
- 実際のデータが存在するところまでの最終行を取得したい場合は、別の方法を使って判定する必要があります。
使用例 : ws.max_rowプロパティ
import openpyxl
# Excelファイルを読み込み
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# 最終行の取得
last_row = ws.max_row
print(f"最終行は { last_row } 行目です。")




最終列を取得する方法【 ws.max_column】


last_column = ws.max_column
このように記述することで、変数「last_column」に最終列を取得することができます。
- 空白や書式の設定を実施している列まで含んだものを、「最大の列番号」として返します。
- データが途中で途切れていても、最後に何かが入力されていればその行までカウントされます。
- 実際のデータが存在するところまでの最終行を取得したい場合は、別の方法を使って判定する必要があります。
使用例 : ws.max_columnプロパティ
import openpyxl
# Excelファイルを読み込み
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# 最終列の取得
last_column = ws.max_column
print(f"最終列は { last_column } 列目です。")


Python openpyxl 最終行・最終列の取得で失敗しないための注意点
ws.max_row
や ws.max_column
を使うと、 空白セルや書式のみのセルも含まれて 最終行・最終列として取得されてしまいます。
そのため、実際のデータ範囲を知りたい場合には注意する必要があります。
実際に書式と空白を含む例
以下のように、セル「B13」はセルの塗りつぶしがされており、セル「G3」には半角空白(スペース)が入力されていると想定します。
これで、ws.max_row
・ws.max_column
を使用して、最終行・最終列を取得したらどうなるでしょうか?


コード例 : ws.max_row・ws.max_columnを使用
import openpyxl
# Excelファイルを読み込み
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# 最終列の取得
last_row = ws.max_row
last_column = ws.max_column
print(f"最終列は { last_row } 行目です。")
print(f"最終列は { last_column } 列目です。")


最終行は「13行目」、最終列は「7列目」が取得されました。
※セルの色を変更・空白(スペース)を入力したセルを取得してしまっています。
対策:実際のデータが存在する最終行・最終列を取得する方法
データが入力されている範囲を正確に知りたい場合は、次の方法を使用しましょう。
ユーザーが行と列を入力し、データがある最終行・最終列を取得
表の範囲で、ユーザーに行と列を入力してもらい、最終行・最終列を取得する方法です。
import openpyxl
# Excelファイルを読み込み
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# ユーザーに確認したい列・行を設定してもらう
target_column = "A"
target_row = 1
# 実際の最終行を取得
last_row = 0
for cell in ws[target_column]:
if cell.value is not None and str(cell.value).strip() != "":
last_row = cell.row
# 実際の最終列を取得
last_column = 0
for cell in ws[target_row]:
if cell.value is not None and str(cell.value).strip() != "":
last_column = cell.column
print(f"実際の最終行: {last_row}")
print(f"実際の最終列: {last_column}")


最終行は「11行目」、最終列は「5列目」が取得されました。
※ユーザーで行・列を入力することで、その箇所のデータが入力されている最終行・列を取得することができました。
補足 (コード概要をクリックして確認する)
- 共通部分
load_workbook()
:指定したExcelファイル(sample.xlsx
)を読み込みます。wb.active
:アクティブなシート(最初のシート)を選択します。
- ユーザー設定の列・行
target_column
:最終行を判定するための基準列。ここでは A列を指定。target_row
:最終列を判定するための基準行。ここでは 1行目を指定。
- 最終行の取得
ws[target_column]
:指定した列(A列)の全セルを順番に取得します。cell.value is not None
:セルに 値が存在する かどうかを判定します。str(cell.value).strip() != ""
:半角スペースや空白のみのセルを除外します。cell.row
:値がある場合に、そのセルの行番号を取得します。- 最後に見つかった行番号を
last_row
に代入します。
- 最終列の取得
ws[target_row]
:指定した行(1行目)の全セルを順番に取得します。- 同様の条件 で値が存在するかをチェックします。
cell.column
:該当セルの 列番号を取得します。- 最後に見つかった列番号を
last_column
に代入します。


さらに応用 : 関数化して使いまわせるようにしよう!
この関数をコピペして使用することで、簡単に正確な最終行・最終列を取得することができます。
import openpyxl
# 指定した列を基準にして、実際の最終行を取得します。
def get_last_row(ws, target_column="A"):
last_row = 0
for cell in ws[target_column]:
if cell.value is not None and str(cell.value).strip() != "":
last_row = cell.row
return last_row
# 指定した行を基準にして、実際の最終列を取得します。
def get_last_column(ws, target_row=1):
last_column = 0
for cell in ws[target_row]:
if cell.value is not None and str(cell.value).strip() != "":
last_column = cell.column
return last_column
# メイン処理
def main():
# Excelファイルを読み込み
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# ユーザーに確認したい列・行を設定
target_column = "A"
target_row = 1
# 関数を使って最終行・最終列を取得
last_row = get_last_row(ws, target_column)
last_column = get_last_column(ws, target_row)
print(f"実際の最終行: {last_row}")
print(f"実際の最終列: {last_column}")
if __name__ == "__main__":
main()
- 関数をコピペする
- ↓以下の関数を全てコピペしてください。
- def get_last_row(ws, target_column=”A”):
def get_last_column(ws, target_row=1):
- def get_last_row(ws, target_column=”A”):
- ↓以下の関数を全てコピペしてください。
- 列や行を指定する
- target_column :最終行を判定するための列を指定します。
- 例:
target_column = "A"
→ A列を基準に最終行を取得
入力は、半角としてください。
- 例:
- target_row :最終列を判定するための行を指定します。
- 例:
target_row = 1
→ 1行目を基準に最終列を取得
入力は、数値(INT型)を入力してください。
- 例:
- target_column :最終行を判定するための列を指定します。
- 最終行・最終列の取得
- 変数「last_row」「last_column」に最終行・最終列を取得することができます。
openpyxlの最終行・最終列の使用例をご紹介
ここからは、VBAのReplace関数の具体的な使用例を紹介します。
以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。
Pythonをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのPython講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
使用例1: Excelのデータを最終行まで読み込み、合計を計算
このコードでは、Excelのデータをopenpyxlを使って最終行まで読み込み、その中の数値を合計します。
たとえば、売上データや点数データの合計を出したい場合に活用できます。
コード例 | Excelデータの合計を計算
import openpyxl
def calculate_total(file_path, sheet_name, column_letter):
# Excelファイルを読み込み
wb = openpyxl.load_workbook(file_path)
ws = wb[sheet_name]
# 最終行を取得
last_row = ws.max_row
# 合計を計算
total = 0
for row in range(1, last_row + 1):
cell_value = ws[f"{column_letter}{row}"].value
if isinstance(cell_value, (int, float)):
total += cell_value
print(f"{column_letter}列の合計: {total}")
# 使用例
file_path = 'sample.xlsx'
sheet_name = 'Sheet1'
column_letter = 'E'
calculate_total(file_path, sheet_name, column_letter)
処理結果


コードの動作概要
指定したファイルパスとシート名を使ってExcelファイルを読み込みます。
ループを使って1行ずつ値を取得し、数値であれば合計します。
最終的な合計値をprint()
関数で表示します。
このコードで使用している機能
機能名 | 説明 |
---|---|
openpyxl.load_workbook() | Excelファイルを読み込みます。 |
ws.max_row | シート内の最終行を取得します。 |
ws[‘A1’].value | 特定のセルの値を取得します。 |
isinstance() | 値が数値型(int または float)か判定します。 |
print() | 結果をコンソールに出力します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- import openpyxl
- openpyxlモジュールをインポートします。
Excelファイルを操作するために必要です。
- openpyxlモジュールをインポートします。
- def calculate_total(file_path, sheet_name, column_letter):
- 関数
calculate_total
を定義します。
ファイルのパス、シート名、列を引数として受け取ります。
- 関数
- wb = openpyxl.load_workbook(file_path)
openpyxl.load_workbook()
を使用して、Excelファイルを読み込みます。
- ws = wb[sheet_name]
- 読み込んだブックから指定したシートを取得します。
- last_row = ws.max_row
ws.max_row
を使って最終行の番号を取得します。
- total = 0
- 合計を格納する変数
total
を初期化します。
- 合計を格納する変数
- for row in range(1, last_row + 1):
- 1行目から最終行まで繰り返し処理を行います。
range()
の終点にlast_row + 1
を指定することで、最終行も含めます。
- 1行目から最終行まで繰り返し処理を行います。
- cell_value = ws[f”{column_letter}{row}”].value
- セルの値を列と行の組み合わせで取得します。
f"{column_letter}{row}"
のように文字列でセル位置を指定します。
- セルの値を列と行の組み合わせで取得します。
- if isinstance(cell_value, (int, float)):
isinstance()
を使って、セルの値が 数値型(int または float)かを判定します。
数値以外(文字列や空白)の場合は処理をスキップします。
- total += cell_value
- 数値の場合は、
total
に加算します。
- 数値の場合は、
- print(f”{column_letter}列の合計: {total}”)
- 最終的な合計をコンソールに出力します。
総括・ポイント
- 最終行を取得して、Excelデータを効率的に読み込むことができます。
- 数値の合計を簡単に算出できるため、売上集計やデータ分析に便利です。
- エラーチェックなしでも、空白や文字列を自動的にスキップするため安全です。
- コードの構造がシンプルなので、初心者でもすぐに活用可能です。
使用例2: Excelのデータを範囲指定して抽出
このコードでは、前回作成した 最終行・最終列を取得する関数 を活用して、
Excelの表データを自動で判定し、その範囲内のデータを抽出 します。
表の範囲が不規則 な場合でも、自動で最終行・最終列を判定してくれるため、
手作業で範囲を指定する手間を省くこと ができます。
コード例 | 最終行・最終列を使ってデータを抽出
import openpyxl
# 指定した列を基準にして、実際の最終行を取得します。
def get_last_row(ws, target_column="A"):
last_row = 0
for cell in ws[target_column]:
if cell.value is not None and str(cell.value).strip() != "":
last_row = cell.row
return last_row
# 指定した行を基準にして、実際の最終列を取得します。
def get_last_column(ws, target_row=1):
last_column = 0
for cell in ws[target_row]:
if cell.value is not None and str(cell.value).strip() != "":
last_column = cell.column
return last_column
# Excelのデータを抽出する関数
def extract_data(file_path, sheet_name, target_column="A", target_row=1):
# Excelファイルを読み込み
wb = openpyxl.load_workbook(file_path)
ws = wb[sheet_name]
# 最終行・最終列を取得
last_row = get_last_row(ws, target_column)
last_column = get_last_column(ws, target_row)
# データを抽出
data = []
for row in ws.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=last_column):
data.append([cell.value for cell in row])
print("抽出したデータ:")
for row in data:
print(row)
# 使用例
file_path = 'sample.xlsx'
sheet_name = 'Sheet1'
extract_data(file_path, sheet_name)
処理結果


コードの動作概要
指定されたファイルパスとシート名を使ってExcelファイルを読み込みます。
ws.iter_rows()
を使って、最終行・最終列までの範囲をループしながらデータを取得します。
抽出したデータをリストとして格納し、print()
で表形式に出力します。
このコードで使用している機能
機能名 | 説明 |
---|---|
openpyxl.load_workbook() | Excelファイルを読み込みます。 |
ws.iter_rows() | 指定した範囲内のセルを一括で取得します。 |
get_last_row() | 最終行を判定する関数です。 |
get_last_column() | 最終列を判定する関数です。 |
print() | 抽出したデータをコンソールに出力します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- import openpyxl
- openpyxl モジュールをインポートします。
Excelファイルを操作するために必要です。
- openpyxl モジュールをインポートします。
- def get_last_row(ws, target_column=”A”):
- 最終行を取得する関数を定義します。
ws
:Excelのワークシートオブジェクトtarget_column
:最終行を判定する基準列(デフォルトはA列)
- 最終行を取得する関数を定義します。
- last_row = 0
- 最終行の値を格納する変数
last_row
を初期化します。
- 最終行の値を格納する変数
- for cell in ws[target_column]:
- 指定した列の全セルを順番にループしてチェックします。
- if cell.value is not None and str(cell.value).strip() != “”:
- セルの値が空白や半角スペースでないか?を判定します。
- last_row = cell.row
- 値がある場合、そのセルの行番号を
last_row
に代入します。
- 値がある場合、そのセルの行番号を
- def get_last_column(ws, target_row=1):
- 最終列を取得する関数を定義します。
target_row
:最終列を判定する基準行(デフォルトは1行目)
- 最終列を取得する関数を定義します。
- last_column = 0
- 最終列の値を格納する変数
last_column
を初期化します。
- 最終列の値を格納する変数
- for cell in ws[target_row]:
- 指定した行の全セルを順番にループしてチェックします。
- if cell.value is not None and str(cell.value).strip() != “”:
- セルの値が空白や半角スペースでないか?を判定します。
- last_column = cell.column
- 値がある場合、そのセルの列番号 を
last_column
に代入します。
- 値がある場合、そのセルの列番号 を
- def extract_data(file_path, sheet_name, target_column=”A”, target_row=1):
- Excelのデータを抽出する関数を定義します。
- wb = openpyxl.load_workbook(file_path)
- 指定された Excelファイルを読み込みます。
- ws = wb[sheet_name]
- 指定された シートを取得します。
- last_row = get_last_row(ws, target_column)
last_column = get_last_column(ws, target_row)- 最終行・最終列を取得し、データ範囲を判定します。
- data = []
- データを格納するための 空のリストを用意します。
- for row in ws.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=last_column):
- 指定した範囲内のセルを行単位で取得します。
- data.append([cell.value for cell in row])
- 取得したセルの値をリスト内包表記を使用してリスト形式とし、
data
に追加します。
- 取得したセルの値をリスト内包表記を使用してリスト形式とし、
- print(“抽出したデータ:”)
- 抽出したデータの出力を示すメッセージを表示します。
- for row in data:
print(row)- データを1行ずつ表示します。
総括・ポイント
- 最終行・最終列を自動取得することで、必要な範囲のデータを簡単に抽出することができます
- 表が不規則でも対応可能で、データの前処理を効率化できます
- エクセルの操作が多い業務に特に役立つコードです
- 関数を再利用すれば、他のExcelファイルにも簡単に適用可能です
この記事のまとめ
この記事では、Pythonのopenpyxlを使用して、最終行・最終列を取得する方法 について詳しく解説しました。
単純な ws.max_row
や ws.max_column
を使用する方法から、空白セルや書式の影響を受けない正確な最終行・最終列の取得方法 まで、段階的に紹介しました。
さらに、実践的な使用例を通じて、業務の効率化やデータ分析に役立つコードの使い方も学ぶことができましたね。
ポイントのおさらい
- openpyxlで最終行・最終列を取得する方法
ws.max_row
とws.max_column
を使うことで、簡単に最終行・最終列を取得可能です。
ただし、空白セルや書式設定の影響で不要なデータが含まれることがあります。
⇒ 「Python openpyxlで最終行・最終列を取得する方法をわかりやすく解説!」をもう一度見る
- 実際の最終行・最終列を正確に取得する方法
- 書式のみのセルや空白セルを除外して、正確な最終行・最終列を取得できます。
ユーザーが基準列や基準行を指定することで、より柔軟に対応可能です。
⇒ 「Python openpyxl 最終行・最終列の取得で失敗しないための注意点」をもう一度見る
⇒ 「コピペで使いまわせるコードはこちら」をもう一度見る
- 書式のみのセルや空白セルを除外して、正確な最終行・最終列を取得できます。
- 使用例を活用した実践的なアプローチ
- 売上データの合計計算 : 最終行まで読み込み、数値を合計する。
- データ範囲の自動抽出 : 最終行・最終列を活用して表の範囲を自動判定し、データを抽出する。
⇒ 「openpyxlの最終行・最終列の使用例をご紹介」をもう一度見る
今回の学びを活用するために
最終行・最終列の正確な取得は、Excelファイルを使ったデータ分析や業務自動化に欠かせないスキルです。
- 売上集計の効率化
- 顧客データの最新情報抽出
- 在庫管理のリアルタイム更新
これらの業務において、この記事で学んだ 最終行・最終列の取得方法 を活用してみてください。

