Python openpyxlで最終行・最終列を正確に取得!空白や書式もスッキリ判定する方法

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

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


Pythonのopenpyxlを使用してExcelを操作してみたい!

openpyxlで最終行・最終列はどうやって取得できるの?

・「max_row」「max_column」だと余分なものまで取得されちゃう?

この記事では、Pythonでエクセルを操作できるライブラリ
「openpyxl」を使用し、最終行・最終列を適切に取得する方法を
わかりやすく解説します。


Pythonのopenpyxlを使って最終行・最終列を正確に取得できれば、以下のような業務も高速化できますよ!

できること
  • 売上データの月次集計 : 最終行を取得して売上合計や平均を算出。
  • 顧客リストの最新データ抽出 : 最終列を活用して最新の顧客情報を取得。
  • 在庫管理のリアルタイム更新 : 最終行を基に在庫数をリアルタイムで更新。

この記事ではコピペすれば、すぐに使えるコード例とともに、実践的な使い方を紹介しますよ。
さっそく一緒に見ていきましょう!😊


よく使う度
難しさ
覚えておくと安心度

Pythonをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのPython講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでPythonを検索 画像出典:Udemy

\  自分のペースで学べるPython講座はこちら  /

目次

この記事でできるようになること

スポンサーリンク

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セルの値を取得

実行結果

Excelを取得

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_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 } 列目です。")
ws.max_columnプロパティの使用例
スポンサーリンク

Python openpyxl 最終行・最終列の取得で失敗しないための注意点

ws.max_rowws.max_column を使うと、 空白セルや書式のみのセルも含まれて 最終行・最終列として取得されてしまいます。
そのため、実際のデータ範囲を知りたい場合には注意する必要があります。

実際に書式と空白を含む例

以下のように、セル「B13」はセルの塗りつぶしがされており、セル「G3」には半角空白(スペース)が入力されていると想定します。
これで、ws.max_rowws.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):
  • 列や行を指定する
    • target_column :最終行を判定するための列を指定します。
      • 例:target_column = "A" → A列を基準に最終行を取得
        入力は、半角としてください。
    • target_row :最終列を判定するための行を指定します。
      • 例:target_row = 1 → 1行目を基準に最終列を取得
        入力は、数値(INT型)を入力してください。
  • 最終行・最終列の取得
    • 変数「last_row」「last_column」に最終行・最終列を取得することができます。
スポンサーリンク

openpyxlの最終行・最終列の使用例をご紹介

ここからは、VBAのReplace関数の具体的な使用例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

Pythonをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのPython講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでPythonを検索 画像出典:Udemy

\  自分のペースで学べる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)

処理結果

使用例1の結果

コードの動作概要

STEP
Excelファイルの読み込み

指定したファイルパスとシート名を使ってExcelファイルを読み込みます。

STEP
最終行の取得

ws.max_rowを使って、指定した列の最終行を取得します。

STEP
合計の計算

ループを使って1行ずつ値を取得し、数値であれば合計します。

STEP
結果の表示

最終的な合計値をprint()関数で表示します。

このコードで使用している機能

スクロールできます
機能名説明
openpyxl.load_workbook()Excelファイルを読み込みます。
ws.max_rowシート内の最終行を取得します。
ws[‘A1’].value特定のセルの値を取得します。
isinstance()値が数値型(int または float)か判定します。
print()結果をコンソールに出力します。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. import openpyxl
    • openpyxlモジュールをインポートします。
      Excelファイルを操作するために必要です。
  2. def calculate_total(file_path, sheet_name, column_letter):
    • 関数calculate_totalを定義します。
      ファイルのパス、シート名、列を引数として受け取ります。
  3. wb = openpyxl.load_workbook(file_path)
    • openpyxl.load_workbook() を使用して、Excelファイルを読み込みます。
  4. ws = wb[sheet_name]
    • 読み込んだブックから指定したシートを取得します。
  5. last_row = ws.max_row
    • ws.max_rowを使って最終行の番号を取得します。
  6. total = 0
    • 合計を格納する変数total を初期化します。
  7. for row in range(1, last_row + 1):
    • 1行目から最終行まで繰り返し処理を行います。
      range()の終点にlast_row + 1を指定することで、最終行も含めます。
  8. cell_value = ws[f”{column_letter}{row}”].value
    • セルの値を列と行の組み合わせで取得します。
      f"{column_letter}{row}"のように文字列でセル位置を指定します。
  9. if isinstance(cell_value, (int, float)):
    • isinstance()を使って、セルの値が 数値型(int または float)かを判定します。
      数値以外(文字列や空白)の場合は処理をスキップします。
  10. total += cell_value
    • 数値の場合は、totalに加算します。
  11. 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)

処理結果

使用例2の結果

コードの動作概要

STEP
Excelファイルの読み込み

指定されたファイルパスとシート名を使ってExcelファイルを読み込みます。

STEP
最終行・最終列の取得

get_last_row()get_last_column()を使って、実際にデータが入力されている範囲を取得します。

STEP
データの抽出

ws.iter_rows()を使って、最終行・最終列までの範囲をループしながらデータを取得します。

STEP
結果の表示

抽出したデータをリストとして格納し、print()で表形式に出力します。

このコードで使用している機能

スクロールできます
機能名説明
openpyxl.load_workbook()Excelファイルを読み込みます。
ws.iter_rows()指定した範囲内のセルを一括で取得します。
get_last_row()最終行を判定する関数です。
get_last_column()最終列を判定する関数です。
print()抽出したデータをコンソールに出力します。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. import openpyxl
    • openpyxl モジュールをインポートします。
      Excelファイルを操作するために必要です。
  2. def get_last_row(ws, target_column=”A”):
    • 最終行を取得する関数を定義します。
      • ws:Excelのワークシートオブジェクト
      • target_column:最終行を判定する基準列(デフォルトはA列)
  3. last_row = 0
    • 最終行の値を格納する変数last_rowを初期化します。
  4. for cell in ws[target_column]:
    • 指定した列の全セルを順番にループしてチェックします。
  5. if cell.value is not None and str(cell.value).strip() != “”:
    • セルの値が空白や半角スペースでないか?を判定します。
  6. last_row = cell.row
    • 値がある場合、そのセルの行番号をlast_rowに代入します。
  7. def get_last_column(ws, target_row=1):
    • 最終列を取得する関数を定義します。
      • target_row:最終列を判定する基準行(デフォルトは1行目)
  8. last_column = 0
    • 最終列の値を格納する変数last_columnを初期化します。
  9. for cell in ws[target_row]:
    • 指定した行の全セルを順番にループしてチェックします。
  10. if cell.value is not None and str(cell.value).strip() != “”:
    • セルの値が空白や半角スペースでないか?を判定します。
  11. last_column = cell.column
    • 値がある場合、そのセルの列番号 をlast_column に代入します。
  12. def extract_data(file_path, sheet_name, target_column=”A”, target_row=1):
    • Excelのデータを抽出する関数を定義します。
  13. wb = openpyxl.load_workbook(file_path)
    • 指定された Excelファイルを読み込みます。
  14. ws = wb[sheet_name]
    • 指定された シートを取得します。
  15. last_row = get_last_row(ws, target_column)
    last_column = get_last_column(ws, target_row)
    • 最終行・最終列を取得し、データ範囲を判定します。
  16. data = []
    • データを格納するための 空のリストを用意します。
  17. for row in ws.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=last_column):
    • 指定した範囲内のセルを行単位で取得します。
  18. data.append([cell.value for cell in row])
    • 取得したセルの値をリスト内包表記を使用してリスト形式とし、dataに追加します。
  19. print(“抽出したデータ:”)
    • 抽出したデータの出力を示すメッセージを表示します。
  20. for row in data:
    print(row)
    • データを1行ずつ表示します。

総括・ポイント

このコードのまとめ
  • 最終行・最終列を自動取得することで、必要な範囲のデータを簡単に抽出することができます
  • 表が不規則でも対応可能で、データの前処理を効率化できます
  • エクセルの操作が多い業務に特に役立つコードです
  • 関数を再利用すれば、他のExcelファイルにも簡単に適用可能です
スポンサーリンク

この記事のまとめ

この記事では、Pythonのopenpyxlを使用して、最終行・最終列を取得する方法 について詳しく解説しました。
単純な ws.max_rowws.max_column を使用する方法から、空白セルや書式の影響を受けない正確な最終行・最終列の取得方法 まで、段階的に紹介しました。
さらに、実践的な使用例を通じて、業務の効率化やデータ分析に役立つコードの使い方も学ぶことができましたね。

ポイントのおさらい

今回の学びを活用するために

最終行・最終列の正確な取得は、Excelファイルを使ったデータ分析や業務自動化に欠かせないスキルです。

  • 売上集計の効率化
  • 顧客データの最新情報抽出
  • 在庫管理のリアルタイム更新

これらの業務において、この記事で学んだ 最終行・最終列の取得方法 を活用してみてください。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「Python...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次