ExcelVBA最終行取得

今日はExcelVBAクイックパーツの紹介を行おうと思う。

本日はExcelVBAで頻度の高い最終行取得のパーツだ。
このパーツはデータ開始行から最終行を取得するというもの。

注意点としてこれは本当の最終行には限らないということ、
例えばデータに空白行が含まれていたりすると期待した動作をしなくなる。
それでもこれを使うのは書き込みの際に便利だからだ。

最も使うであろうパターンが最終行+1行で書き込みだ。
新たにデータを書き込む場合、空白行無しの前提ならば役に立つ。

では、前置きはこれまでとして以下の物がそれとなる。

'#
'#最終行取得関数(空白セルを間に含まないデータ用)
'#
'引数1:ワークシート(オブジェクト変数)
'引数2:指定対象行(ここに指定したデータ開始行以降から検索開始)
'引数3:指定対象列

'返り値1:指定行の値がなければ指定行の前行を取得
'返り値2:指定行に値があり、その次行に値が無い場合は指定行を取得
'返り値3:指定対象行から次の空白セル前までの最終行値を取得

Function GetEndRow(ws As Worksheet, StartRow As Long, Col As Long) As Long

    If (ws.Cells(StartRow, Col).Value = "") Then
        'スタート行が空白ならばスタート行-1を取得
        GetEndRow = StartRow - 1
    ElseIf (ws.Cells(StartRow, Col).Value <> "" And ws.Cells(StartRow + 1, Col).Value = "") Then
        'スタート行に値があり、その次行に値がない場合スタート行を取得
        GetEndRow = StartRow
    Else
        '指定対象行から次の空白セル前までの最終行値を取得
        GetEndRow = ws.Cells(StartRow, Col).End(xlDown).row
    End If
        
End Function

次に使い方だが、


Option Explicit
Sub 最終行テスト()
Dim ws As Worksheet
Dim EndGyo As Long

    Set ws = Worksheets("Sheet1")

    EndGyo = GetEndRow(ws, 1, 1)
    MsgBox (EndGyo)

    EndGyo = GetEndRow(ws, 2, 2)
    MsgBox (EndGyo)
End Sub

こんな感じで使って頂ければと思う。
注意点として、ワークシートのオブジェクト変数を使っているので、
宣言と引数指定は変数型を間違えないよう注意してほしい。

今回は以上となる。

ブログ主が運営しているゲームです。

 MobileFight

 ジマさんの囲碁入門