トップページ(目次)

475.最終行を取得する

最終行を、それぞれの場面ごとに動的に取得するのは、マクロVBA学習者の最初の難題かと思います。 プログラミングの知識ゼロの方でも理解できるように、順を追って細かく解説します。

先に、まず結論から

<実行前後>
 → 
Sub 最終行を取得する()

    最終行 = Cells(Rows.Count, "A").End(xlUp).Row
    
    MsgBox "A列の最終行は「 " & 最終行 & " 」行目"

End Sub
ちなみに、 Range("A" & Rows.Count).End(xlUp).Rowと書いても同じです。 一般的には可読性などが考慮されてCellsが使われているだけで、 Rangeの方がお好みとか、他の方に見せないVBAならRangeも可です。 次に、そもそも、各要素が何を表しているのか、さっぱりわけがわからないので要素を分解
【各要素を分解して解説】 Cells(Rows.Count, "A").End(xlUp).Row = 4(行目)Cells(Rows.Count, "A") →Rows.CountはExcel 最大行の104万8576行目 =Cells(1048576, "A") =Range("A1048576") ↓ End(xlUp) →「Ctrl+↑」を押すこと ↓ Row →セルが止まった行数を取得 まとめると、 エクセルの一番下の行のA列セル [Cells(1048576, "A") = Cells(Rows.Count, "A") = Range("A1048576") ] を選択した状態で、キーボードの「Ctrl+↑」 [End(xlUp)] を押して止まった行数 [Row] を取得している。今回のケースは「4」行目
次に、具体的な考え方や、素朴な疑問を整理
【考え方を解説】 まず、エクセルの最大行数という見慣れない概念が出てきます。これは、 Rows.Count → Rows(行数).Count(数える) → 104万8576行 となり、 エクセル2007以降の最大行数を表しています。
(疑問①) そもそも、最大行数はすでに決まっているに、なぜ、104万8576行と書かず、 Rows.Countと毎回最大行数を取得するというわかりにくい仕様なのか? (答え①) エクセルのバージョンによって最大行数が変わるからです。 そのため、もし、104万8576行を記入してしまうと、次のバージョンで 最大行数が変化した場合、それまでに作成したVBAツールがすべて機能しなく なります。ちなみに、2003までは最大行数が 6万5536行 でした。
(疑問②) なぜ一番下から Ctrl+↑ を押すとか面倒な手順を踏むの? セルA1から Ctrl+↓ でも実際に操作すると同じ行に止まるし、 End(xlUp) → End(xlDown) となるだけで少し見やすいです。 (例)Cells(1, "A").End(xlDown).Row (例)Range("A1").End(xlDown).Row (答え②) 途中に空欄があるとそこで止まってしまうためです。 以下のようにA列途中に空欄があるとそこで止まってしまいます。 キャプチャのように、正しい最終行は4行目ですが、2行目を取得してしまっています。 そのため、エクセル最大行数の最下部から上へ動く仕様になっています。 クリックで拡大
最終行の取得過程が理解できれば、初心者が漏れなく苦戦する「変数」に関しても 具体的に感覚が掴めてきますので、焦らず、しっかりと習得しましょう。

Copyright © 2021 https://excel3000.web.fc2.com/ All Rights Reserved.
    inserted by FC2 system