Excelを使ってデータを管理する際、シート内でどの行までデータが入力されているのか、つまり「最終行」を取得することはよくある操作です。これにより、プログラムが自動でデータの範囲を把握し、次の処理を効率よく進めることができます。PythonからExcelを操作する際には、xlwings ライブラリを使用することで、この最終行の取得を簡単に行うことが可能です。
この記事では、xlwings を使って最終行を取得する方法を、具体的なコード例を交えながら紹介します。初心者でもわかりやすいように、丁寧に解説していきます。
最終行とは
最終行とは、シートの中でデータが入力されている最後の行のことです。Excelでは、データがどの範囲まで入力されているかを把握するために、最後にデータが入力されている行を取得するのが一般的です。例えば、A列にデータが100行まで入力されている場合、最終行は100となります。
最終行を取得することで、次の空白行にデータを追加したり、データ範囲を動的に操作することができるようになります。
Excel操作ではなくてはならない存在だね!
xlwingsで最終行を取得する基本的な方法
xlwings を使うと、Excelシートの最終行を簡単に取得できます。sheet.range() メソッドや api を使ってシートのデータ範囲にアクセスし、最終行を特定します。
最終行を取得するコード
対象ファイル
次のようなシートを用意します!
サンプルコード
import xlwings as xw
# Excelを起動
app = xw.App(visible=False)
# Excelファイルを読み込み
wb = app.books.open('sample.xlsx')
# シートを選択
sheet = wb.sheets[0]
# 最終行を取得
last_row = sheet.range('A1').end('down').row
print(f'最終行は: {last_row}')
# クローズ
wb.close()
app.quit()
この方法では、A1 からデータが続く限り下に移動して最終行を特定しますが、途中に空白行がある場合にはその手前で止まります。つまり、空白行を飛び越えることはありません!
空白行を含む最終行の取得
対象ファイル
次のようなシートを用意します!
サンプルコード
import xlwings as xw
# Excelを起動
app = xw.App(visible=False)
# Excelファイルを読み込み
wb = app.books.open('sample.xlsx')
# シートを選択
sheet = wb.sheets[0]
# A列の最終行を取得する
last_row = sheet.api.Cells(sheet.api.Rows.Count, 1).End(xw.constants.Direction.xlUp).Row
print(f'最終行は: {last_row}')
# クローズ
wb.close()
app.quit()
sheet.api.Cells(sheet.api.Rows.Count, 1): A列の最終行を取得するために、ExcelのAPIを利用して、最下行(1048576行目)から検索を始めます。
.End(xw.constants.Direction.xlUp): xlUp を使って下から上に向かってデータを探し、最初に見つかったデータの行を取得します。これにより、空白行が途中にあっても無視され、最後のデータが入力された行を取得します。
シート全体で最終行を取得する方法
特定の列だけでなく、シート全体の最終行を取得したい場合もあるでしょう。この場合、ExcelのネイティブAPIを利用して、シート全体の最終行を取得することができます。
対象ファイル
次のようなシートを用意します!
サンプルコード
import xlwings as xw
# Excelを起動
app = xw.App(visible=False)
# Excelファイルを読み込み
wb = app.books.open('sample.xlsx')
# シートを選択
sheet = wb.sheets[0]
# シート全体の最終行を取得
last_row = sheet.api.UsedRange.Rows.Count
print(f'シート全体の最終行は: {last_row}')
# クローズ
wb.close()
app.quit()
シートの最終行を取って、そこまで罫線を引くみたいな使い方は結構便利だよ!
最終行を使ってデータを追加する方法
# 上記の情報で
# A列の最終行を取得
last_row = sheet.range('A1').end('down').row
# 最終行の次に新しいデータを追加
sheet.range(f'A{last_row + 1}').value = '新しいデータ'
# クローズ
wb.close()
app.quit()
この例はA列であることを忘れないでね!
他の列だったら f’のあとのAを列のアルファベットに変えてみよう!
まとめ
この記事では、xlwings を使用してExcelシートの最終行を取得する方法について説明しました。最終行を取得することで、データの動的な操作や自動更新が可能になります。特定の列やシート全体の最終行を取得する方法、そしてその最終行を使って新しいデータを追加する方法も紹介しました。
これらを利用して、日々の業務をラクにしていきましょう!
コメント