何かとよく使うExcelシートの最終行。
A列がIDなどでデータが必ず入っているなら↓の書き方で問題ないのですが、
最終行 = Sheet1.Cells(Rows.Count,1).End(xlUp).Row
A列のすべての行に必ずデータが入っているとは限らない、B列もC列も、どの列が必須の列かわからない場合に最終行を取得するのってどうすればいいだろう。
Sheet1.Cells(1,1).CurrentRegion.SpecialCells(xlLastCell).Row
という書き方をしてみたこともあるのですが、これだと正しく最終行が取得できないときがあるので断念。
そこで、「A列から順番に10列分くらい調べて最も行数の大きかった数を最終行とする」みたいな関数を作成して使っています。
そのオリジナル関数で最終行を取得する場合は↓のように書きます。
変数 = getLastRow(sh01) ※sh01はシートのオブジェクト名
シートを指定して、そのシートの最終行の数値を返す関数です。シートの指定はオブジェクト名で行う前提です。今回の場合はsh01がシートのオブジェクト名です。
最終行を簡単に取得するオリジナル関数(Excel VBA)
オリジナル関数getLastRowの内容は下記の通り。
'shObjシートの最終行を取得するオリジナル関数 'A列から10列分の最終行を調べて一番大きい数字を返す 'shObjはシートのオブジェクト名やシートオブジェクト変数を指定 Function getLastRow(shObj As Object) As Long With shObj Dim c As Long Dim maxR As Long Dim r As Long maxR = 1 'ここを1 to 20とすると20列分調べます。適宜調整ください。 For c = 1 To 10 r = .Cells(Rows.Count, 1).End(xlUp).row If r > maxR Then maxR = r End If Next c End With getLastRow = maxR End Function
実際に使うときはこんな感じ↓
Sub testFunction() Dim r As Long r = getLastRow(sh01) MsgBox r End Sub
上のプログラムで指定している「sh01」シートの内容が↓だった場合、getLastRow関数の結果は「6」となります。
ちなみに、シートのオブジェクト名は↓画像の赤丸のところを見るとわかります。
最初に関数を作成する手間はありますが、しょっちゅう最終行を取得するならその手間を差し引いても楽になりますのでほんとにおすすめです。
ぜひお試しあれ!
コメント