第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 ・・・新着記事一覧を見る
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。