特定の1列ではなく、「シート全体のどこかにデータがある最後の行」を取得したい場面では、手法の選択が成否を分けます。代表的な2つのアプローチを比較します。
確実性が高い「Findメソッド」
シート全体から「最後に入力されたセル」を逆順探索するFindメソッドは、複数列にまたがるデータや、どの列が最長かわからない場合に最も信頼できる選択肢です。
Dim lastRow As Long Dim rng As Range Set rng = ws.Cells.Find(What:="*", _ After:=ws.Cells(1, 1), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious) If Not rng Is Nothing Then lastRow = rng.Row Else lastRow = 1 ' 完全な空白シートの場合 End If
引数のLookIn:=xlFormulasを指定すれば、数式を含む実質的なデータ末尾をキャッチできます。一方、画面上の表示値だけを対象にしたい場合はLookIn:=xlValuesに切り替えるなど、柔軟な制御が可能です。
手軽だが注意が必要な「UsedRange」
ws.UsedRange.Rows.Countは使用済み範囲を取得する簡潔な書き方ですが、過去に書式設定や文字入力が行われ、その後「Deleteキー」だけで消去されたセルも使用領域と見なしてしまいます。結果として、実際のデータよりはるか下の行番号を返してしまうリスクがあり、厳密な処理には推奨されません。