エクセルVBAのコード組み立てで、データ入力済のセルの最終行番号を知る必要がある場合は多くあります。
データベースシートを作る場合は必ずと言っていいと思います。
今回はこの方法について説明をしていきます。
エクセルVBAのプログラム作成で、入力データをその都度蓄積していく場合など、
既にデータの入っている最終セルの位置を調べたいという時が多くあります。
こんにちは、じゅんぱ店長(@junpa33)です。














コンテンツ
データ入力済セルの最終行番号を取得するVBAコード
どこまでの行と列のセルにデータが入っているかを調べる作業は、
エクセルVBAコードを作成する中で、何かのプロシージャーの組み立てのパーツとして
結構、必須的に必要になってくることが多いかと思います。
「どこまでの行番号にデータが入っているか?」
実際に作表されたエクセルシートなら ”実際に目で見れば” 簡単に判断できます。
それは、人の目で見た場合、データ行が途中で空白行として続いていたとしても
人が見れば、”ファジー” であっても自然と ”たぶんこうだろう” と判断できるからです。
VBAコードでその判断を下そうとすると、そうは上手くいきません。
エクセルVBAには、そんな「ファジー・多分このような」を判断する機能なんて無いからです。
シートのセルの使用状況は、時と場合で全く異なり、たとえ入力フォーマットを作成しても、セルの使用状態は十人十色状態なので、データがどこからどこまで入っているかは
「ソフト製作者が決めた定型の方法だけでは、常に正しいということはない。」ということになります。
「データ記述の最終行を取得する」という、解説書やサイトの中によく出てくるのは、
このケースには「この方法」を、また、こういったケースには「この方法」を、なんて
対応コードの構文的な「この方法」が何種類も書かれていますが、
その都度、何種類かある中からバラバラと「今回はこれ」なんて使っていられません。また実務者にとっても実用的でもありません。
何故、何がこんなにも ”望む結果を導き出させない” 原因なのかというと、
ズバリそれは、取得対象列に含まれる「空白セル」です。
それがたとえ、「データとしての空白」であったとしてもです。
ですので実務上、
心掛けたいPOINT
データ入力の最終行を調べたい場合は、基本的な前提として出来るだけ、
「使用行を数えるのはどの列か」を「空白セル」が含まれる列を取得の列にしない。
ということが肝心です。
- データ行の先頭に番号を付与して「空白」の無いデータ列を作るなどの対策をしましょう。
- どうしても空白行が出来てしまう場合は、データシート上なら、行削除をしてしまう。
テンプレートシートなら、元々のシート設計でデータシートを作成してそこからのデータ転記になるようにしておく。
ということです。
解説としてはこのような順序で進めて行きます。
- 行数取得のキーワード Rows.Count
- Endプロパティ
- 説明を進めるための例題を示します
- 入力行を上から下方向へ数えてどこまでか xlDown
- 入力行を下から上方向へ数えてどこまでか xlUp
- 空白行を削除してデータ番号を整理する方法
行数取得のキーワード Rows.Count
Rows.Count とは、「Rows」中学英語で習った複数形 Row(行)の全てということです。すべての行をCount(数えて)くださいということです。
答えは、エクセルバージョン2003なら「65536」、2007以降なら「1048576」になります。
最終行を取得する場合、この Rows.Count は重要です。
Endプロパティ
Endプロパティによって、指定したデータ入力のある範囲の終端セルを取得選択します。
上下左右4方向の指定が出来ます。
xlUp | 下から上方向へ | End(xlUp) |
xlDown | 上から下方向へ | End(xlDown) |
xlToleft | 右から左方向へ | End(xlToleft) |
xlToright | 左から右方向へ | End(xlToright) |
説明を進めるための例題を示します
この様な表を考えます。
表の開始行は4行目から、10行目と11行目が空白行となっています。

入力行を上から下方向へ数えてどこまでか xlDown
上から下方向へ数える時に、数え始めのセルを「Cells(4,1)」または「Range(“A4”)」とします。
構文的には、開始セル「Cells(4,1)」.下方向です「End(xlDown)」となります。
これはセルを選択したと同じ状態ですので、次に何を知りたいかで今回は「.Row」(行番号は?)と付け足します。
ちなみに、「.value」(値は?)などを付け足すことも出来ます。
Sub 行数計算A()
Dim Arow As Long, Aval As Variant
Arow = Worksheets("Sheet1").Cells(4, 1).End(xlDown).Row
Aval = Worksheets("Sheet1").Cells(4, 2).End(xlDown).Value
Debug.Print "Arow " & Arow & vbCrLf & "Aval " & Aval
End Sub
実行結果
見事に「空白」セルで停止してしまいました。(結果を意図するところは20行目のはずですが・・・)
入力行を下から上方向へ数えてどこまでか xlUp
数え始めの開始セルは、「Cells(Rows.Count,1)」または「Range(“A” & Rows.Count)」となります。
構文的には先ほどの下方向へ数える時とほぼ同じです。
「下から上方向に数える」というのが一番使用頻度が多いのではと思います。そういう意味で、先ほどのRows.Countは行番号取得のキーワードになるということです。
Sub 行数計算B()
Dim Arow As Long, Aval As Variant
Arow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Aval = Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Value
Debug.Print "Arow " & Arow & vbCrLf & "Aval " & Aval
End Sub
実行結果
実質的に、臨んだ実行結果になったと思います。
でも、データ表の中に空白行が混ざっているのは気になります。データ番号も飛び番号になってしまっています。
空白行を削除してデータ番号を整理する方法
この様に空白行やデータ番号の飛び番号を放置していては、バグの原因になりかねません。
そこで、この「End(xlDown)」と「End(xlUp)」を使って空白行を削除しておきます。
空白の無い一つのデータ集合体であれば、
チェック入力行を上から下方向へ数えても、下から上方向へ数えても最終行は同じになります。
もし同じにならないのなら、空白行が存在しているということです。
さらにその場所は、上から下方向に数えた時の最終行の次の行になります。
Sub 行数計算C() Dim ArowD As Long, ArowU As Long Dim i As Long, n As Long ArowD = Worksheets("Sheet1").Cells(4, 1).End(xlDown).Row ArowU = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row Debug.Print "ArowD " & ArowD & vbCrLf & "ArowU " & ArowU For i = 1 To ArowU If ArowD <> ArowU Then Rows(ArowD + 1).Delete End If '行を削除したので、全体の行数が変化しました。再度数える必要があります。 ArowD = Worksheets("Sheet1").Cells(4, 1).End(xlDown).Row Next i '最終行を再確認します。コード組み立て的には必要ありません。 ArowU = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row Debug.Print "ArowD " & ArowD & vbCrLf & "ArowU " & ArowU For n = 4 To ArowD Cells(n, 1).Value = n - 3 Next n End Sub
実行結果
このコードの実行で、空白行が削除され、データ番号も連続に振り直しされました。
実行前の「ArowDとArowU」は異なった数値になっていましたが、
実行後は同値に変化しました。
注意事項
- データ番号はリストの整理番号としての利用になりますので、データ固有のID番号とは別物としてください。
データ入力済セルの最終行番号を取得する方法 まとめ
最初にも言いましたが、他にも最終行を取得する方法はいくつかあります。
でも実際問題、普通に行うコード組み立てでは、覚えることも使うことも全然必須ではありません。逆に必要ないです。
それよりも、データの「空白行」を作らない。
出来てしまっても「削除修正」を行っておくことに心血を注いだ方がいいです。
ということで、ここでは、「上から下方向へ」と「下から上方向へ」を知っておいてください。
これで吉になります。
また改めて、入力セルの列方向の数え方は記事にしたいと思います。
エクセルVBAを最初から勉強するために
エラー対処はエクセルVBAでも大きな課題です。
そのためには、エクセルVBAの基本構造も十分知っておくことが必要です。
そんな基本部分から勉強するための記事を書いています。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です
エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。


電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる
(著者)大村あつし(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)
学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。






























このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。