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