第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入門」の記事
第19回.総合練習問題1
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。