セルの「Address」取得には幾つか方法があります。(組み合わせ次第では本当に沢山の方法があるので、一概には言えませんが)。今回は取得した「利用している範囲」について、行と列を数値として転回していく方法について記述していきます。
始めに。
Excelには、特定の構文で一括指定できるような、使い勝手の良い機能は多数ありますが、特定の事を指定していくと、結局ユーザーナイズになるところも多いと思います。
ワンクッションあって面倒かもしれませんが、便利に活用していく上で、
一読頂いても良いかも知れません。
注意事項
今回のは、[Range]として取得したセル番地を、列番号や、行番号に、数値として
転回していきます。
構文は長くなりがちですが、複数に分けて管理したり、一回書いてしまえば自分で管理し易い構文にもなるので、是非参照して頂ければと思います。
考え方とかについて
割と汎用性のあるコードを書いて行きたいと思いますが、もっと精査されたコードを書く事もできると思います。利用者の方の使い方に応じてカスタマイズして頂ければと思います。
今回は変数を、漢字で行っています。通常はあまり書かないコードですが、
読み解く上では、割と分かり易くなっていると思います。
自分なりの書きたい時や、半角英数字に変更して管理したい場合は[Ctrl+F]を使って、検索や置換を行って頂ければ幸いです。
最終行、最終列のセル番地を取得する
以下は、実行すると『 [使っている最初のセル ~ 使っている最後のセルまで範囲指定]して、その範囲から[列番号、行番号を取得する] 』構文になります。
Option Explicit
Sub 取得_最終データ()
Dim 使用範囲 As Range ''使用セルを「Range」で取得
Dim 最左列 As Long, 最右列 As Long ''使用セル内で「最左列」「最右列」を数字で指定
Dim 最上行 As Long, 最下行 As Long ''使用セル内で「最上行」「最下行」を数字で指定
''UsedRangeでデータの範囲を自動的に求め、セットします
''この記述方法では「Set」の書き込みは必須です。
Set 使用範囲 = ActiveSheet.UsedRange ''アクティブなシート内での使用範囲を取得
''範囲から、上下の行番号と左右の行番号を求めます
最上行 = 使用範囲.Row ''アクティブな範囲内での最上行を取得
最下行 = 使用範囲.Row + 使用範囲.Rows.Count - 1 ''アクティブな範囲内での最下行を取得
''範囲から、左右の列番号と上下の列番号を求めます
''アクティブな範囲内での最左列を取得
最左列 = 使用範囲.Column
''アクティブな範囲内での最左列から最右列を取得
最右列 = 使用範囲.Column + 使用範囲.Columns.Count - 1
'' '最左右の列を求めた結果
''''--------------------------------------
MsgBox "最左列は : " & 最左列
MsgBox "最右列は : " & 最右列
''''--------------------------------------
'' '最上下の行を求めた結果
MsgBox "最上行 : " & 最上行
MsgBox "最下行 : " & 最下行
''''--------------------------------------
''''**************************************
'【始終セルの書き出しを設定】
'' Debug.Print "最左列は : " & 最左列
'' Debug.Print "開始行は : " & 最上行
''''--------------------------------------
'' Debug.Print "最右列は : " & 最右列
'' Debug.Print "最終行は : " & 最下行
''''**************************************
End Sub
左右の利用列と、上下の利用行についてMsgboxで書き出していますが、
コメントアウトをして頂ければ、下記の文面もDebug.printで表示可能です。
左上の、開始使用列と行、
右下の、最終使用列と行、など。
ご自身の使い勝手に応じて使って頂ければと思います。
メリットと、デメリットについて。
●メリットとしては、もちろん、開始行、最終行、開始列、最終列を、数値として、
取得できる事と思います。これが出来れば変数値への代入など、汎用性や利用勝手は結構広がります。
●デメリットは、特に細分化する意味がない場合です。
[Range]で取得して使いまわす人達は、この構文まで覚える必要はないと思います。
●ご自身で使い易い方法で使って頂ければ嬉しいです。