Home » Excel VBA Rangeオブジェクト » Range.Addressから行番号を取得する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

このサイト・インストラクターのネタ帳のアクセスログをチェックしていて、
「excel vba addressから行番号」
という検索キーワードに気づきました。

Excel VBA(Visual Basic for Applications)では、RangeオブジェクトのAddressプロパティで、セル番地を取得できます。

Range.Addressから行番号を取得する

このRange.Addressで取得したセル番地から、行番号だけを取得するにはどうすればいいのかを探していた方による検索が、
「excel vba addressから行番号」
です。

[スポンサードリンク]

「excel2007 vba addressから行を取得」
「vba find関数のaddressから行のみを取得するには」
といった検索キーワードも、おそらく同じようなことを考えた方による検索でしょう。

Range.Rowプロパティで行番号を取得できる

まずお伝えしたいのは、RangeオブジェクトのRowプロパティを使えば、行番号を取得できるということです。
Sub 行番号を取得する()
 MsgBox ActiveCell.Row
End Sub

上記のSubプロシージャを実行すると、アクティブセルの行番号がメッセージボックスに表示されます。

Range.Addressプロパティで取得した文字列から、行番号部分だけを取得する必要はありません。

Mid関数・InStr関数を使ってRange.Addressから行番号を取得する

実際に利用するマクロ内では、Range.Rowプロパティを使うとしても、セル番地から行番号を取得する考え方を理解しておくのは、大切なことです。
Sub セル番地から行番号を取得する_Mid_InStr()
 MsgBox Mid(ActiveCell.Address, InStr(2, ActiveCell.Address, "$") + 1)
End Sub

上記のSubプロシージャでも、アクティブセルの行番号がメッセージボックスに表示されます。

Range.Addressプロパティに引数を指定しない場合「$A$1」のような、絶対参照の形式でセル番地を取得できます。

「$A$1」といったセル番地の、2つ目の「$」の後ろが行番号ですから、これを取得すればいいわけです。

Mid関数とInStr関数を組み合わせて、2つ目の「$」の後ろの文字列を取得しています。

上記のプロシージャを以下のように分解してあげると、意味が理解しやすくなるはずです。

Sub セル番地から行番号を取得する_Mid_InStr_()
 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で取得した文字列から行番号を取得できます。
Sub セル番地から行番号を取得する_Split()
 MsgBox Split(ActiveCell.Address, "$")(2)
End Sub

列番号のアルファベットを取得するのと、考え方は同じです。

このプロシージャも以下のように分解するほうが、理解しやすくなるはずです。

Sub セル番地から行番号を取得する_Split_()
 Dim adrs As String
 Dim arr() As String

 adrs = ActiveCell.Address
 arr = Split(adrs, "$")
 MsgBox arr(2)
End Sub

配列変数・arrに何が格納されているかを、ローカルウィンドウで確認しながら、ステップ実行してみてください。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » Range.Addressから行番号を取得する

「Excel VBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.