
こんにちは、タケイチです。
最終行の取得は、最終着地ではなくて始めるためにまずはやっておきますか!というくらいのコードです。
普段エクセルで処理しているのをVBAで短縮したい!と思ったものの大半に使われるのが最終行の取得です。
最終行の値を取得したり、最終行の次の行の行番号を取得して書き込んでみたりと、頻出頻度の高いコードです。
基本コードとなると理解して、しっかりと覚えておいた方が良いと思います。プログラミングをしていると頻出頻度が多すぎて最終的には手が勝手に覚えますので、それまでの辛抱だと思ってお付き合いください。
早速ですが最終行を取得したいなら、「シート名.Cells(Rows.count,該当の列).End(XlUp).Row」が基本コードになります。
僕の基本コードをお伝えして、使い方の参考を示せればと思います。
僕が一番使いやすい最終行の算出コード
シート名.Cells(Rows.Count,該当の列).End(XlUp).Row
このコードをまだ見たことがない人は、Rows.CountとEndの部分でどんな返り値があるのかがイメージできないと思いますので、各々で説明していきたいと思います。
Rows.Countの解説
Rows.Countとは、一番下まで行ってくれ!という命令です。
なので、エクセルの一番下の行までズン!と進んでくれると思ってください。
End()の解説
Endは、カッコの中に入るワードによって処理が変化しますが、今回はXlUpです。
XlUpは簡単に言うとCtrl + ↑のコマンドを押した状態です。
得られる結果
シート名.Cells(Rows.Count,該当の列).End(XlUp).Row
任意のシート名にある該当列の一番下でCtlr + ↑を押して一番最初に入力されている行数を返してくれます。
参考コード
1 2 3 4 5 6 7 |
Public Sub 最終行を求めてMsgBoxを起動() MsgBox Sheet1.Cells(Rows.Count, 1).End(xlUp).Row End Sub |
プラスワン!最終行の値を取得するコード
1 2 3 4 5 6 7 |
Public Sub 最終行の値を求めてMsgBoxを起動() MsgBox Sheet1.Cells(Rows.Count, 1).End(xlUp).Value End Sub |
今まで話していたのは、最終行を取得する。行番号を取得する話でしたが、最終行の値を取得するコードは上記のコードを使用すると良いでしょう。
.Rowにすると、行番号で取得することができます。.Valueにすると、値で取得することができます。
最終行を出すうえで、今の方法に落ち着いたのは何故?
空白は無視できなかった!最終行が算出できなかった
僕は手作業で最終行に進むとき、開始行でCtrl + ↓を押して最終行へ行くようにしていました。
しかし、Ctrl + ↓は空白があるとそこで止まってしまうという弱点があります。

この事態を防ぐために、Rows.Countで一番下まで一度行ってから、End(XlUp)の方法でCtrl+↑で途中の空白を関係なく最終行の調査ができている。
肝はRows.Count
最初にも書いたように、シート名.Cells(Rows.count,該当の列).End(XlUp).Rowが最終行を指示していますが、なぜ、「シート名.Cells(先頭行,該当の列).End(XlDown).Row」にしないのか?
該当の行を一番下から上にあげるパターン。と先頭行にしてから連続した文字の一番下に下げるということです。
例題1)最終行を使った調査



最終行を使った調査のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
'=============================================================================== '==第一段階===モジュール全体で使う変数はここで宣言できる! '=============================================================================== '=============================================================================== Dim SearchStr As String '探す値の変数 Dim SubstitutionStr As String '代入する値の変数 Dim MasterWs As Worksheet '使用するワークシートの設定 Dim lastrow1 As Integer '最終行の取得 '=============================================================================== '==第二段階===第一段階の変数を整えるときに使うことが多い! '=============================================================================== '=============================================================================== Private Sub 初期設定() 'ワークシートの設定 Set MasterWs = Worksheets("実運用シート") '最終行を取得 lastrow1 = MasterWs.Cells(Rows.Count, 1).End(xlUp).Row End Sub '=============================================================================== '==第三段階===実コード、本筋のコードになる '=============================================================================== '=============================================================================== Public Sub 探して代入の処理() Dim looprun1 As Integer Dim cnt1 As Integer Dim MsgStr As String Dim IntStr As String Call 初期設定 cnt1 = 0 'カウンターを戻す '探す値を確定 MsgStr = "探す値を入力してください" 'InputBoxで表示させるステータスを表示 SearchStr = 値を返す(MsgStr) MsgStr = "" '空白に戻しておく '代入する値を確定 MsgStr = "代入する値を入力してください" 'InputBoxで表示させるステータスを表示 SubstitutionStr = 値を返す(MsgStr) MsgStr = "" '空白にしておく '実際に処理を開始 For looprun1 = 5 To lastrow1 IntStr = MasterWs.Cells(looprun1, 1).Value If IntStr = SearchStr Then MasterWs.Cells(looprun1, 1).Value = SubstitutionStr cnt1 = cnt1 + 1 End If Next looprun1 MsgBox SearchStr & "の値を" & SubstitutionStr & "に置換しました。" & Chr(10) & "実際に、処理した件数:" & cnt1 & "件" End Sub '=============================================================================== '==第四段階===ファンクションは返り値があるのを覚えておいて! '=============================================================================== '=============================================================================== Function 値を返す(MsgStr As String) 値を返す = InputBox(MsgStr) End Function |
例題2)最終行を使った追加


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Public Sub 最後に追加() Dim looprun1 As Integer Dim lastrow1 As Integer Dim row1 As Integer Dim str1 As String '最終行を取得 lastrow1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row str1 = T01探して書き換え.値を返す("追加するワードを入力してください") '最後に追加 Sheet1.Cells(lastrow1 + 1, 1).Value = str1 MsgBox str1 & "を最終行(" & lastrow1 + 1 & "行目)に追加しました。" End Sub |