Excel

Excel VBAを使用した色々なセルの範囲選択方法を覚書。
セルの最終行や最終セルのアドレスの取得、アクティブセル範囲(空白行で囲まれた範囲)を一発で範囲選択する方法などのVBAのサンプルを覚書。

選択したい範囲が固定的でない場合や選択した範囲のセルの一つ一つに同じ処理を実行するVBAのサンプルもついでに覚書きしておく。
スポンサードリンク


VBAを使用した基本的なセルの選択方法

VBAでセルを選択する際に使用する基本的なオブジェクトは、"Range"(レンジ)オブジェクトです。
例えば、特定のセル(ここではA1セルとする)を選択する場合は、以下のように記述します。
Sub samaple()

    Range("a1").Select

End Sub
まとまった範囲、例えばセルA1からC10までの範囲を選択する場合は、左上隅のセルのアドレスと右下隅のセルのアドレスを":"でつなげて指定します。
例えば、以下のような感じです。
Sub samaple()

    Range("a1:c10").Select

End Sub

VBAを使用した特殊なセルの選択方法

次に特殊なセルを選択する場合のVBAのサンプルプログラムを記載します。

最終セル

特定できないセルを選択したい場合、例えば最終セルを選択したいという場合には以下のようになります。

最終セルの選択方法

Sub samaple()

ActiveCell.SpecialCells(xlLastCell).Select

End Sub
上記VBAのサンプルプログラムの"ActiveCell"は、"今アクティブになっているセル"という意味を持つRangeオブジェクト返します。

SpecialCellsのカッコ内に指定されている"xlLastCell"は最後のセルという意味になります。

上記の1行は、マクロ記録で[Ctrl] + [End]キーを押した場合に選択されるセルと同じです。

.SpecialCells(xlLastCell)を使用する際は少し注意が必要です。
例えば、以下のようにワークシートにデータが入っていた場合、選択されるセルは、"J20"のセルになります。
セル選択VBAのサンプルプログラム

ここで"J20"のセルの値を[Delete]キーを使用して削除します。
再度VBAのサンプルプログラムのプログラムを実行しても"J20"が選択されます。

なぜ値が入っていない空白のセルにもかかわらず選択されてしまうのかというと、.SpecialCells(xlLastCell)は、単純に最終セルと言うよりは、値が入力された過去があるセルも含めた最終セルという意味になります。

最終セルのアドレスを取得する方法

最終セルのアドレスをMsgBox関数で表示するVBAのサンプルプログラムです。
Sub samaple()

 ActiveCell.SpecialCells(xlLastCell).Select

 MsgBox ActiveCell.Address

End Sub
実行すると以下のように最終セルのアドレスがメッセージボックスに表示されます。
最終セルのアドレスがメッセージボックスに表示される。

もう少し簡略化というか、最終セルを選択せずに最終セルのアドレスを取得することもできます。
Sub samaple()

 MsgBox ActiveCell.SpecialCells(xlLastCell).Address

End Sub

最終セルの行番号と列番号を取得する方法

最終セルの行番号と列番号を取得するVBAのサンプルプログラムです。
Sub samaple()

 MsgBox ActiveCell.SpecialCells(xlLastCell).Row

 MsgBox ActiveCell.SpecialCells(xlLastCell).Column
 
End Sub
"Row"が行版号を返し、"Column"は列番号を返します。
列番号となるので、"J"列であっても、数値の"10"が返されます。

アクティブセル領域(空白で囲まれたセル範囲)の選択方法

アクティブセル領域は、空白で囲まれたセル範囲という意味で、ショートカットキーの[Ctrl] + [*]をおした時に選択される範囲を示します。

表全体を一発で選択したい場合などによく使うかと思います。
VBAのプログラムで書くと以下のようになります。
Sub samaple()

  Selection.CurrentRegion.Select
  
End Sub
使用する際は、現在選択されているセルが含まれたアクティブセル領域が選択されることに注意してください。

アクティブセル領域の選択を使用してセルの最終行を取得する方法

ちょっとした応用ですが、よく「表の最後の行番号ってどうやって取得するの?」という質問をされますので、その方法を以下に記載します。

以下のVBAのサンプルプログラムでは、選択された範囲の最終行版号と最終列番号をメッセージボックスで表示します。
Sub samaple()
  
    MsgBox Selection.Rows.Count + Selection(1).Row - 1
    MsgBox Selection.Columns.Count + Selection(1).Column - 1
  
End Sub
ちょっとわかりづらいので簡単に解説すると、"Selection.Rows.Count"は、全体の行数を表しています。
"Selection(1).Row"は、選択された範囲の一番先頭行の行番号を表します。
一番先頭の行番号に選択されている行数を足してマイナス1すると選択範囲の最終行番号が求められます。

文字の説明だとわかりづらいですので一度試してみてください。
列番号の取得も同じ原理です。

ちょっとマニアックですが、こんな方法もあります。
Sub samaple()
Dim strRng As String

    strRng = Selection.CurrentRegion.Address
    MsgBox Right(strRng, Len(strRng) - InStrRev(strRng, "$"))
  
End Sub

選択範囲のアドレスを取得する方法

現在選択されている範囲のアドレスを取得するVBAのサンプルプログラムを以下に記載します。
Sub samaple()

    MsgBox Selection.CurrentRegion.Address
  
End Sub

選択されている範囲のセルの1つ1つに同じ処理をする方法

例えば、セルの文字列のアルファベット小文字をアルファベット大文字に置換したい場合など選択されている範囲のセルの1つ1つに決まった処理をしてあげるVBAのサンプルプログラムです。
Sub sample()

    For Each Rng In Selection
    
        Rng.Value = UCase(Rng)
        
    Next Rng

End Sub

VBAで色々なセル選択をする方法のまとめ

Excel VBAで色々なセルの選択方法のVBAのサンプルプログラムを紹介しました。

セルの選択方法で質問やこんなことがしたいなど有りましたらコメント欄に記載していただければと思います。

スポンサードリンク

  

関連記事

 カテゴリ