皆さん、こんにちは。VBA講師の佐藤です。実務で「データが追加されるたびに、その下の空白セルに自動で値を入力したい」というケースは非常に多いですよね。
単に一番下のセルへ移動するだけなら記録マクロでも可能ですが、実務では「途中に空白がある場合」や「データが全くない場合」など、イレギュラーな状況を想定しなければなりません。今回は、現場のトラブルを回避しつつ、スマートに一番下の空白セルを特定する手法を解説します。
なぜ「End(xlUp)」を使うべきなのか
初心者がよく陥る罠が「Range(“A1048576”).End(xlUp).Offset(1, 0)」のような書き方です。確かに動きますが、もしデータが1行も入力されていない場合、このコードはA列の最後尾から逆上るため、思わぬ誤動作を招くことがあります。
実務で最も安全なのは、「データが存在する最終行を判定し、その行番号に1を加える」というロジックです。
信頼性の高いコード例
以下のコードは、A列にデータが一つもなくてもエラーにならず、正しく最初のセル(A1)を選択する堅牢な記述です。
Sub SelectNextCell()
Dim lastRow As Long
‘ A列の最終行を取得(データがない場合は1を返す)
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
‘ データが入力されているかチェック
If Cells(1, 1).Value = “” Then
Cells(1, 1).Select
Else
Cells(lastRow + 1, 1).Select
End If
End Sub
なぜこの書き方が「現場向き」なのか
このコードのポイントは、「Cells(Rows.Count, 1)」を使っている点です。Excelのバージョンが変わっても、列番号や行番号に依存せず、常にそのシートの物理的な最大行から逆上るため、コードの互換性が極めて高くなります。
また、実務では「A列の途中に数式の結果として空欄(””)がある」場合もあります。その場合は「End(xlUp)」ではなく、上から下に探す「End(xlDown)」を組み合わせる必要がありますが、まずはこの「下から上に探す」基本形をマスターしてください。
まとめ:現場で「止まらない」コードを書こう
VBAで一番怖いのは、データが増えた時に「コードが意図しない挙動をしてデータが上書きされる」ことです。今回紹介した「最終行を取得してから+1する」という考え方は、データの追記処理における基本中の基本です。
ぜひ、皆さんの業務効率化ツールに組み込んでみてください。次回は、途中に空白がある場合のより高度な判定方法についてお話ししましょう。それでは、また。
