【Python】エクセル操作:最終行を取得する方法(win32com/End(xlUp))

時計 2020.10.29 / 時計

【Python】エクセル操作:最終行を取得する方法(win32com/End(xlUp))

エクセルマクロVBAでは、表の最終行の行番号や値を取得する方法は必ず必要になる技術です。

VBAで表全体を操作する際、多くの場合で最終行の行数が必要になります。
これはマクロVBAで作業をしたことがある人にはわかってもらえると思います。

VBAで最終行の行数を取得する方法は
Cells(Rows.Count, 1).End(xlUp).Row
です。これは定型文として覚えている方も多いでしょう。

ではこれはPythonのwin32comではどのように記述すればいいのでしょうか?

本記事では、Pythonによるエクセルの最終行を取得する方法を解説していきます。

ここではエクセル操作にwin32comを使用します。
win32comの使い方がわからない方は以下の記事をご参考ください。

マクロVBAでの最終行取得方法

エクセルの最終行を取得方法はいくつか存在しますが、最も一般的に使われている方法は前述している方法になります。

Cells(Rows.Count, 1).End(xlUp).Row

上記のマクロでは、とある表の1列目の最終行の行数を返します。

簡単にマクロの説明をしますと、Rows.Countはそのエクセルの最終行を示しています。
そして、End(xlUp)は文字列が入っているセルまで上に移動します。

つまり、セルの【最終行、1列目】から値が入っているセルまで上に移動するということです。

このマクロは、いわば対象列の最終行のセルを選択して、キーボードの「Ctrl 」+ 「↑」を押しているのと同等です。

ではなぜwin32comではこのマクロVBAが使えないのか。

答えを言うと、それはxlUpがwin32comでは使えないからです。

なぜxlUpが使えないのか

Pythonのwin32comに限った話ではなく、VBSなどでもxlUpは使用できません。

なぜならば、xlUpは「VBA」専用だからです。
頭にxlと付くものはVBA専用だと思っていいです。

そもそもこのxlUpとはなんなのか。

実は、xlUpとはただの数値です。

VBAではこの数値を気にしないで使えるように、あらかじめある数値をxlUpに指定しています。

ここまでで、どうやったらwin32comでxlUpを使うのかわかりましたね。

そうです!xlUpにその数値を入れてあげれば、win32comでもxlUpが使えるようになります!!

xlUpなどの数値

xlUpなどのxlで始まるVBA専用の定数を以下に記します。

定数 内容
xlUp -4162 上への移動
xlDown -4121 下への移動
xlToLeft -4159 左への移動
xlToRight -4161 右への移動

Pythonでエクセル最終行を取得する方法

ここまでくればPythonのwin32comでエクセルの最終行を取得する方法はわかったかと思います。

念のため以下にその方法を載せておきます。

xlUp = -4162
lastrow = sheet.Cells(sheet.Rows.Count, 8).End(xlUp).Row

上記プログラムでは、対象ワークシートから8列目の最終行の行番号をlastrowに渡しています。

xlUpに「-4162」を代入するだけで、この便利なマクロが使えるようになります。

まとめ

Pythonによるエクセルの最終行を取得する方法はいかがでしたでしょうか。

私はPythonでエクセル操作をし始めた頃は、今までよく使用していたEnd(xlUp)が使えなくて絶望していたときがありました。

この方法を見つけたときは非常に嬉しかったのを覚えています。

みなさんもぜひこの方法を使って、Pythonでエクセルを操作してください。