第18回.最終行の取得(End,Rows.Count)
Excelワークシートにおける表の最終行の取得は、マクロVBAの必須技術になります、
エクセルVBAにおける最終行取得の必要性
データは横に項目があり、縦に項目に対するデータが入っている事が一般的です。
しかし、
そのデータ行数は決まった行数ではない事が普通です。
そして、
マクロVBAでは、表の全行に対して処理することが多くなります。
しかし、
表の全行に対して処理する為には、データの最終行が分からないと、
毎回、最終行の数値を変更しなければならなくなり、そんな面倒な事はしてられません。
以下の表で説明します。

そして、
この行数が増えても、VBAは変更すること無く使えるようにしたいです。
そこで、
データの入っている最後の行数を、VBAで自動的に取得したいということになります。
.End(xlDown):Ctrl+↓
A1セルが選択されている状態で、
Ctrl + ↓
これで、A11に移動できます。
Cells(1, 1).End(xlDown)
このように書きます。

これは都合が悪いですね。
.End(xlUp):Ctrl+↑
いったんシートの一番下(シートの最終行)のA列(A1048576)セルに移動してから、
Ctrl + ↑
とやれば、A11に移動できます。
Cells(Rows.Count, 1).End(xlUp)
このように書きます。
Rows.Count
2007以降なら1048576です、2003なら65536です。
Rowsとはシートの全行で、Countなのでその数ということです。
シートのA列の最終行から、上に向かって、Ctrl+↑で移動している訳です。
※この表現はとても分かりづらいです、このページ最後の方で説明しています。
Endプロパティの方向(↑↓←→)について
End(Direction)
xlDown : ↓下へ
xlToLeft : ←左へ
xlToRight : →右へ
セルの行数を取得するRowプロパティ
Cells(1, 1).End(xlDown)
これや
Cells(Rows.Count, 1).End(xlUp)
これらは、最後のセル(行数ではなく、セルそのもの)を表しています。
つまり最後のセルのRangeオブジェクトになります。
つまりそのままでは行数ではなく、セルに入っている値(Value)が取得されてしまいます。
Cells(1, 1).End(xlDown).Row
や
Cells(Rows.Count, 1).End(xlUp).Row
このように、.Rowを指定します。
これで、データの最後の行数を取得できることになります。
上記例なら、11が返されます。
返されるとは、つまりは、
Cells(1, 1).End(xlDown).Rowは11と同じだと言う事です。
まずは
Cells(Rows.Count, 1).End(xlUp).Row
または
Cells(1, 1).End(xlDown).Row
これは、定型文として丸暗記して下さい。
Cells(Rows.Count, 1).End(xlUp).Rowを日本語に訳す
セルA1048576からCtrl+↑のセルの行数
最初の何回かはタイピングして覚えてください。
そうすることで、VBAになじむことができるようになります。
この一文には多くのプロパティを含んでいて、今後の学習に必ず役に立ってきます。
EndプロパティがRangeオブジェクトを返す
今はまだ理解できなくても構いません。
詳しい説明は今後少しずつ説明しますので今回はさわりだけ説明しておきます。
このような説明をしてきました。
ちょっと解りづらいと思います。
オブジェクトを返すプロパティがあると言う事だけ知っておいて下さい。
EndはRangeオブジェクト返すプロパティであるということです。
Endプロパティの問題点
手動のCtrl+↑でも同じですが、可視セル(見えているセル)の最終行となってしまいます。
そのような方法ができない場合は、下記ページの別の方法を使用してください。
最終行に関するサイト内のページ
他の解説ページも是非お読みください。
同じテーマ「マクロVBA入門」の記事
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)
第19回.総合練習問題1
第20回.条件分岐(IF)
第21回.条件分岐(ElseIf)
第22回.条件分岐(Select Case)
第23回.メッセージボックス(MsgBox関数)
第24回.インプットボックス(InputBox関数)
第25回.名前付き引数について
新着記事NEW ・・・新着記事一覧を見る
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)
GROUPBY関数(縦軸でグループ化して集計)|エクセル入門(2023-11-18)
PY関数(Pythonコードをセル内で実行)|エクセル入門(2023-11-17)
画像「セルに配置」のVBAについて(365の新機能)|VBA技術解説(2023-11-13)
スピルのゴーストの範囲を選択するVBA|ツイッター出題回答 (2023-10-31)
エクセル試験3:月間の所定労働時間|エクセル練習問題(2023-10-04)
エクセル試験2:所得税の計算|エクセル練習問題(2023-10-04)
エクセル試験1:曜日別の平均客単価|エクセル練習問題(2023-10-04)
列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.条件分岐(IF)|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。