はじめに
Excel VBA で、最も下の行が知りたいという要件はしばしばあります。
取得する方法は、複数あります。
それぞれ一長一短がありますが、多くの人は自分の作っているワークシートの状況に応じて好みのものを使っていると思います。
図形が含まれると期待した動作にならない
多くは「使われているセルで最後のものから行番号を取得する」というものです。しかしそれより下に図形があると、実際に印刷されるのはもう少し下の方になります。図形を含めた印刷範囲にかかる最後の行を知りたいという場合には、図形の座標を考慮する必要があります。
ソースコード
図形を考慮した上で最下行の番号を取得する VBA のコード例は以下のようになります。
''' 図形を考慮した上で最下の行番号を返す Public Function GetLastRow() As Long Dim lastBottom As Double lastBottom = GetLastBottom() Dim r As Long For r = ActiveSheet.Cells.SpecialCells(xlLastCell).Row To ActiveSheet.Rows.Count GetLastRow = r If ActiveSheet.Rows(r).Top + ActiveSheet.Rows(r).Height >= lastBottom Then Exit For End If Next End Function ''' 図形を含めた最下の座標を返す Private Function GetLastBottom() As Double Dim i As Long Dim maxY As Double maxY = 0# For i = 1 To ActiveSheet.Shapes.Count Dim y As Double y = ActiveSheet.Shapes(i).Top + ActiveSheet.Shapes(i).Height If y > maxY Then maxY = y Next If maxY = 0# Then maxY = ActiveSheet.Cells.SpecialCells(xlLastCell).Top + _ ActiveSheet.Cells.SpecialCells(xlLastCell).Height End If GetLastBottom = maxY End Function