このサイト・インストラクターのネタ帳のアクセスログをチェックしていて、
「excel vba addressから行番号」
という検索キーワードに気づきました。
Excel VBA(Visual Basic for Applications)では、RangeオブジェクトのAddressプロパティで、セル番地を取得できます。
このRange.Addressで取得したセル番地から、行番号だけを取得するにはどうすればいいのかを探していた方による検索が、
「excel vba addressから行番号」
です。
「excel2007 vba addressから行を取得」
「vba find関数のaddressから行のみを取得するには」
といった検索キーワードも、おそらく同じようなことを考えた方による検索でしょう。
Range.Rowプロパティで行番号を取得できる
まずお伝えしたいのは、RangeオブジェクトのRowプロパティを使えば、行番号を取得できるということです。MsgBox ActiveCell.Row
End Sub
上記のSubプロシージャを実行すると、アクティブセルの行番号がメッセージボックスに表示されます。
Range.Addressプロパティで取得した文字列から、行番号部分だけを取得する必要はありません。
Mid関数・InStr関数を使ってRange.Addressから行番号を取得する
実際に利用するマクロ内では、Range.Rowプロパティを使うとしても、セル番地から行番号を取得する考え方を理解しておくのは、大切なことです。MsgBox Mid(ActiveCell.Address, InStr(2, ActiveCell.Address, "$") + 1)
End Sub
上記のSubプロシージャでも、アクティブセルの行番号がメッセージボックスに表示されます。
Range.Addressプロパティに引数を指定しない場合「$A$1」のような、絶対参照の形式でセル番地を取得できます。
「$A$1」といったセル番地の、2つ目の「$」の後ろが行番号ですから、これを取得すればいいわけです。
Mid関数とInStr関数を組み合わせて、2つ目の「$」の後ろの文字列を取得しています。
上記のプロシージャを以下のように分解してあげると、意味が理解しやすくなるはずです。
Dim adrs As String ' セル番地
Dim pos As Long ' 2つ目の$の位置 adrs = ActiveCell.Address
pos = InStr(2, adrs, "$")
MsgBox Mid(adrs, pos + 1)
End Sub
InStr関数を使って、変数・adrsの2文字目以降で「$」が何文字目にあるかを変数・posに代入しておいて、
pos = InStr(2, adrs, "$")
セル番地から、その位置に「+ 1」した文字列を、Mid関数を使って取得してメッセージボックスに表示しています。
MsgBox Mid(adrs, pos + 1)
Split関数を使ってRange.Addressから行番号を取得する
配列を利用するため難易度は上がりますが、以下のようなプロシージャでもRange.Addressで取得した文字列から行番号を取得できます。MsgBox Split(ActiveCell.Address, "$")(2)
End Sub
列番号のアルファベットを取得するのと、考え方は同じです。
このプロシージャも以下のように分解するほうが、理解しやすくなるはずです。
Dim adrs As String
Dim arr() As String adrs = ActiveCell.Address
arr = Split(adrs, "$")
MsgBox arr(2)
End Sub
配列変数・arrに何が格納されているかを、ローカルウィンドウで確認しながら、ステップ実行してみてください。
- Newer:選択セルを取得する-Selectionプロパティ
- Older:URLの変更とリダイレクト処理
Home » Excel VBA Rangeオブジェクト » Range.Addressから行番号を取得する