色々な方法がありますが、今回は最終のセル位置を検索するのに、RangeオブジェクトのFindメソッドを使います。
構文は下のようになります。
Object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection,MatchCase, MatchByte, SearchFormat)
- Object Rangeオブジェクト
- What 語句を指定 [省略不可]
- After 開始するセルを指定 [省略可能]
- LookIn 種類を指定 数式(xlFormulas)、値(xlValues)、コメント(xlComments) [省略可能]
- LookAt 条件を指定 完全に同一なセルだけを検索(xlWhole)、一部分でも一致するセルの検索(xlPart) [省略可能]
- SeachOrder 行列の検索方向を指定します。列方向に検索する(xlByColumns)、行方向に検索する(xlByRows) [省略可能]
- SearchDirection セルの検索方向を指定 前方に検索(xlNext:規定値)、後方に検索(xlPrevious)[省略可能]
- MatchCase 大文字と小文字を区別する(True)、区別しない(False) [省略可能]
- MatchByte 半角と全角を区別する(True)、 区別しない(True) [省略可能]
- SearchFormat Trueを指定するとFindFormatプロパティで指定された書式を使用します。Falseで使用しません。[省略可能]
LookIn、LookAt、SearchOrder、MatchByte、MatchCaseを、省略した場合には前回処理で使用された値を使用します。
繰り返し検索を行うには、Object.FindNext(After)、Object.FindPrevious(After) を使用します。
同様の最終位置を取得するVBA「入力されている最終位置、先頭位置の取得」を掲載しています、参考にしてください。
Findメソッドを使用し、入力されている最終のセル位置を取得するVBA
Excelの標準モジュールにVBAコードを作成
'最終セル位置を取得する
Public Sub GetLastCell()
Dim s1 As String
'Findを実行
'What:="*"空でないセル、LookAt:=xlWhole:完全一致、
'SearchOrder:=xlByRows:行方向
'SearchDirection:=xlPrevious:前のセル
ActiveSheet.Cells.Find(What:="*", LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Select
s1 = "セル位置:" & ActiveCell.Address & _
" 行:" & ActiveCell.Row & " 列:" & ActiveCell.Column
MsgBox "最終位置は " & s1
End Sub
Excel VBAの実行結果
最終位置のアドレスと行列の位置が表示されます。
シートに何も入力されていない場合はエラーになりますので、必ず何か入力しておいてください。