[Python] エクセルで最終行を取得する方法【openpyxl】
Pythonのライブラリ openpyxl
を使用してエクセルファイルの最終行を取得するには、worksheet.max_row
を使用します。
openpyxl
はエクセルファイルを操作するためのライブラリで、max_row
はシート内のデータが入力されている最終行の番号を返します。
例えば、ws.max_row
とすることで、ws
というワークシートオブジェクトの最終行を取得できます。
空白行が含まれている場合でも、データがある最後の行を取得します。
- openpyxlを使ったエクセル操作
- 最終行や最終列の取得方法
- セルの値の取得と入力方法
- データの範囲指定とループ処理
- エクセルファイルの保存方法
openpyxlとは
openpyxl
は、PythonでExcelファイル(.xlsx形式)を操作するためのライブラリです。
このライブラリを使用することで、Excelファイルの読み込み、書き込み、編集が簡単に行えます。
特に、データ分析や自動化のタスクにおいて、Excelファイルを扱うことが多い場合に非常に便利です。
openpyxl
は、セルの値の取得や設定、シートの追加や削除、書式設定など、さまざまな機能を提供しており、Pythonプログラミングを通じてExcelを効果的に活用することができます。
エクセルファイルの読み込み
エクセルファイルを開く方法
openpyxl
を使用してエクセルファイルを開くには、まずライブラリをインポートし、load_workbook関数
を使います。
以下のサンプルコードでは、指定したファイル名のエクセルファイルを開く方法を示しています。
from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
このコードを実行すると、sample.xlsx
という名前のエクセルファイルが開かれ、workbook
という変数にワークブックオブジェクトが格納されます。
ワークブックとワークシートの取得
エクセルファイルを開いた後、ワークブックから特定のワークシートを取得することができます。
以下のサンプルコードでは、ワークブックからデフォルトのシートを取得する方法を示しています。
# デフォルトのワークシートを取得
worksheet = workbook.active
また、特定のシート名を指定して取得することも可能です。
# シート名を指定して取得
worksheet = workbook['Sheet1']
シート名の指定方法
シート名を指定する際は、シート名を文字列として指定します。
シート名は大文字小文字を区別するため、正確に入力する必要があります。
以下のサンプルコードでは、シート名を指定してワークシートを取得する方法を示しています。
# シート名を指定して取得
worksheet = workbook['データ']
シートの一覧を取得する方法
ワークブック内のすべてのシート名を取得するには、sheetnames
プロパティを使用します。
以下のサンプルコードでは、ワークブック内のシート名をリストとして取得し、表示する方法を示しています。
# シート名の一覧を取得
sheet_names = workbook.sheetnames
# シート名を表示
print(sheet_names)
このコードを実行すると、ワークブック内のすべてのシート名がリスト形式で表示されます。
エクセルの最終行を取得する方法
max_rowプロパティの使い方
openpyxl
では、ワークシートの最終行を取得するためにmax_row
プロパティを使用します。
このプロパティは、シート内のデータが入力されている最も下の行番号を返します。
以下のサンプルコードでは、max_row
を使って最終行を取得する方法を示しています。
from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
worksheet = workbook.active
# 最終行を取得
last_row = worksheet.max_row
print(f'最終行: {last_row}')
このコードを実行すると、シート内の最終行番号が表示されます。
最終行の取得例
具体的な例として、以下のようなデータがあるとします。
A列 | B列 |
---|---|
1 | 2 |
3 | 4 |
5 |
この場合、max_row
を使用すると、最終行は3と表示されます。
# 最終行を取得
last_row = worksheet.max_row
print(f'最終行: {last_row}') # 出力: 最終行: 3
空白行がある場合の注意点
max_row
は、シート内の最終行を取得する際に、空白行がある場合でもその行を含めてカウントします。
したがって、データが途中で途切れている場合、実際のデータの最終行とは異なる結果が返されることがあります。
例えば、以下のようなデータがある場合、
A列 | B列 |
---|---|
1 | 2 |
3 | 4 |
この場合、max_row
は3を返しますが、実際のデータは1行目と3行目のみです。
データが途中で途切れている場合の対処法
データが途中で途切れている場合、max_row
だけでは正確な最終行を取得できないことがあります。
このような場合は、ループを使用して、実際にデータが入力されている行を確認する方法が有効です。
以下のサンプルコードでは、各行をチェックして、最終行を特定する方法を示しています。
# 実際の最終行を取得するための変数
actual_last_row = 0
# 各行をチェック
for row in worksheet.iter_rows(min_row=1, max_col=1, max_row=worksheet.max_row):
if row[0].value is not None: # セルが空でない場合
actual_last_row = row[0].row
print(f'実際の最終行: {actual_last_row}')
このコードを実行すると、実際にデータが入力されている最終行が表示されます。
最終行を使った応用例
最終行にデータを追加する方法
最終行を取得した後、その行の次の行に新しいデータを追加することができます。
以下のサンプルコードでは、最終行の次の行にデータを追加する方法を示しています。
from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
worksheet = workbook.active
# 最終行を取得
last_row = worksheet.max_row
# 最終行の次の行にデータを追加
worksheet.cell(row=last_row + 1, column=1, value='新しいデータ')
worksheet.cell(row=last_row + 1, column=2, value=100)
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、最終行の次の行に「新しいデータ」と100が追加されます。
最終行までのデータをループ処理する方法
最終行を使って、データをループ処理することも可能です。
以下のサンプルコードでは、最終行までのデータを取得し、各セルの値を表示する方法を示しています。
# 最終行を取得
last_row = worksheet.max_row
# 最終行までのデータをループ処理
for row in range(1, last_row + 1):
cell_value = worksheet.cell(row=row, column=1).value
print(f'行 {row}: {cell_value}')
このコードを実行すると、1列目の各行の値が表示されます。
最終行を基準に範囲を指定してデータを取得する方法
最終行を基準にして、特定の範囲のデータを取得することもできます。
以下のサンプルコードでは、最終行のデータを含む範囲を指定して、データを取得する方法を示しています。
# 最終行を取得
last_row = worksheet.max_row
# 最終行までのデータを取得
data_range = worksheet.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=2)
# データを表示
for row in data_range:
for cell in row:
print(cell.value, end=' ')
print() # 改行
このコードを実行すると、指定した範囲のデータが表示されます。
最終行を削除する方法
最終行を削除するには、delete_rowsメソッド
を使用します。
以下のサンプルコードでは、最終行を削除する方法を示しています。
# 最終行を取得
last_row = worksheet.max_row
# 最終行を削除
worksheet.delete_rows(last_row)
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、最終行が削除され、エクセルファイルが更新されます。
エクセルの最終列を取得する方法
max_columnプロパティの使い方
openpyxl
では、ワークシートの最終列を取得するためにmax_column
プロパティを使用します。
このプロパティは、シート内のデータが入力されている最も右の列番号を返します。
以下のサンプルコードでは、max_column
を使って最終列を取得する方法を示しています。
from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
worksheet = workbook.active
# 最終列を取得
last_column = worksheet.max_column
print(f'最終列: {last_column}')
このコードを実行すると、シート内の最終列番号が表示されます。
最終列の取得例
具体的な例として、以下のようなデータがあるとします。
A列 | B列 | C列 |
---|---|---|
1 | 2 | 3 |
4 | 5 | |
7 |
この場合、max_column
を使用すると、最終列は3と表示されます。
# 最終列を取得
last_column = worksheet.max_column
print(f'最終列: {last_column}') # 出力: 最終列: 3
最終行と最終列を組み合わせた範囲指定
最終行と最終列を組み合わせることで、特定の範囲のデータを取得することができます。
以下のサンプルコードでは、最終行と最終列を使って、データの範囲を指定し、すべてのデータを表示する方法を示しています。
# 最終行と最終列を取得
last_row = worksheet.max_row
last_column = worksheet.max_column
# データの範囲を取得
data_range = worksheet.iter_rows(min_row=1, max_row=last_row, min_col=1, max_col=last_column)
# データを表示
for row in data_range:
for cell in row:
print(cell.value, end=' ')
print() # 改行
このコードを実行すると、指定した範囲のデータが表示されます。
これにより、シート内のすべてのデータを効率的に取得することができます。
エクセルのデータを操作する方法
セルの値を取得する方法
openpyxl
を使用して、特定のセルの値を取得するには、cellメソッド
を使用します。
以下のサンプルコードでは、A1セルの値を取得する方法を示しています。
from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
worksheet = workbook.active
# A1セルの値を取得
cell_value = worksheet.cell(row=1, column=1).value
print(f'A1セルの値: {cell_value}')
このコードを実行すると、A1セルの値が表示されます。
セルに値を入力する方法
特定のセルに値を入力するには、cellメソッド
を使用して値を設定します。
以下のサンプルコードでは、B2セルに新しい値を入力する方法を示しています。
# B2セルに値を入力
worksheet.cell(row=2, column=2, value='新しい値')
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、B2セルに「新しい値」が入力され、エクセルファイルが更新されます。
セルの書式を変更する方法
セルの書式を変更するには、openpyxl.styles
モジュールを使用します。
以下のサンプルコードでは、A1セルのフォントを太字に変更する方法を示しています。
from openpyxl import load_workbook
from openpyxl.styles import Font
# エクセルファイルを開く
workbook = load_workbook('sample.xlsx')
worksheet = workbook.active
# A1セルのフォントを太字に変更
worksheet['A1'].font = Font(bold=True)
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、A1セルのフォントが太字に変更されます。
セルの結合・分割を行う方法
セルを結合するには、merge_cellsメソッド
を使用します。
また、結合したセルを分割するには、unmerge_cellsメソッド
を使用します。
以下のサンプルコードでは、A1からB1までのセルを結合し、その後分割する方法を示しています。
# A1からB1までのセルを結合
worksheet.merge_cells('A1:B1')
# エクセルファイルを保存
workbook.save('sample.xlsx')
# セルを分割
worksheet.unmerge_cells('A1:B1')
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、最初にA1からB1までのセルが結合され、その後分割されます。
これにより、セルのレイアウトを柔軟に変更することができます。
エクセルファイルの保存と書き込み
エクセルファイルを保存する方法
openpyxl
を使用してエクセルファイルを保存するには、saveメソッド
を使用します。
以下のサンプルコードでは、エクセルファイルを保存する方法を示しています。
from openpyxl import Workbook
# 新しいエクセルファイルを作成
workbook = Workbook()
worksheet = workbook.active
# セルに値を入力
worksheet['A1'] = 'こんにちは'
worksheet['B1'] = '世界'
# エクセルファイルを保存
workbook.save('sample.xlsx')
このコードを実行すると、sample.xlsx
という名前のエクセルファイルが作成され、指定した値が入力されます。
上書き保存と別名保存の違い
- 上書き保存: 既存のファイルに対して、変更を加えた内容をそのまま保存します。
ファイル名は変わらず、内容だけが更新されます。
上書き保存を行うには、同じファイル名でsaveメソッド
を呼び出します。
- 別名保存: 新しいファイル名を指定して保存することで、元のファイルはそのまま残り、新しいファイルが作成されます。
別名保存を行うには、異なるファイル名を指定してsaveメソッド
を呼び出します。
以下のサンプルコードでは、上書き保存と別名保存の例を示しています。
# 上書き保存
workbook.save('sample.xlsx') # 既存のファイルに上書き
# 別名保存
workbook.save('sample_copy.xlsx') # 新しいファイルを作成
保存時のファイル形式の指定方法
openpyxl
は、主に.xlsx
形式でエクセルファイルを保存しますが、他の形式で保存することはできません。
もし異なる形式で保存したい場合は、pandas
ライブラリを使用することを検討する必要があります。
以下のサンプルコードでは、pandas
を使用してデータフレームをエクセルファイルとして保存する方法を示しています。
import pandas as pd
# データフレームを作成
data = {'列1': [1, 2, 3], '列2': [4, 5, 6]}
df = pd.DataFrame(data)
# エクセルファイルとして保存
df.to_excel('sample_pandas.xlsx', index=False)
このコードを実行すると、sample_pandas.xlsx
という名前のエクセルファイルが作成され、データフレームの内容が保存されます。
pandas
を使用することで、より多様なデータ形式での保存が可能になります。
よくある質問
まとめ
この記事では、Pythonのopenpyxl
ライブラリを使用してエクセルファイルを操作する方法について詳しく解説しました。
エクセルファイルの読み込みから最終行や最終列の取得、データの追加や書式変更、さらにはファイルの保存方法まで、幅広い操作が可能であることがわかりました。
これらの知識を活用して、日常のデータ管理や自動化のタスクを効率的に行うことができるでしょう。
ぜひ、実際にコードを試してみて、エクセルファイルの操作を自分のプロジェクトに取り入れてみてください。