今日は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
こんな感じで使って頂ければと思う。
注意点として、ワークシートのオブジェクト変数を使っているので、
宣言と引数指定は変数型を間違えないよう注意してほしい。
今回は以上となる。