【VBA】選択したセルを取得する『Selectionプロパティ』の使い方

スポンサーリンク

Selectionプロパティとはユーザーが選択しているセルを返すプロパティです。

選択している範囲によってSelectionプロパティが返す値が変わります。
例えば、

  • A1セルを選択している状態
  • Selectionプロパティの内容はRange("A1")を指すことになります。

  • A1~C3のセル範囲を選択している状態
  • Selectionプロパティの内容はRange("A1:C3")を指すことになります。

となります。

では実際にどのように使用するのかを具体的にプログラム例で見ていきましょう。

Selectionプロパティを用いた様々なプログラム

ユーザーが選択した範囲に値を入力

プログラム

Sub Selectionプロパティ01()
    Selection.Value = "テスト"
End Sub

プログラム説明
【VBA】【Selectionプロパティ】ユーザーが選択した範囲に値を入力

一番シンプルなプログラムです。このプログラムではユーザーが選択した範囲に対して、

Selection.Value = "テスト“

で文字列「テスト」を入力しています。

例えば、ユーザーがセル範囲C4~G10を選択したとします。その後、プログラムを実行すると、セル範囲C4~G10に文字列「テスト」が入力されます。

【補足】
『Selection.Value = "テスト"』の『.value』を省略して、『Selection = "テスト"』としてもプログラムは正常に動作します。

Rangeオブジェクトで範囲を選択した後に値を入力

プログラム

Sub Selectionプロパティ02()
    Range("C4:G9").Select
    Selection.Value = "テスト"
End Sub

プログラム説明
【VBA】【Selectionプロパティ】Rangeオブジェクトで範囲を選択した後に値を入力

このプログラムでは

Range("C4:G9").Select

でセル範囲C4~G10を選択しています。
そのセル範囲に対して、

Selection.Value = "テスト“

で文字列「テスト」を入力しています。

【補足】
Rangeオブジェクトとは「セル」を表すオブジェクトです。『Range("C4:G9")』は『セル範囲C4~G10』表すRangeオブジェクトです。

選択した範囲の値を削除する

プログラム

Sub Selectionプロパティ03()
    Selection.Delete
End Sub

プログラム説明
【VBA】【Selectionプロパティ】選択した範囲の値を削除する

このプログラムではユーザーが選択した範囲の値を

Selection.Delete

で削除しています。

例えば、セル範囲C4~G10に文字列『テスト』が書いてあるとします。ユーザーがセル範囲C4~G10を選択し、プログラムを実行すると、文字列『テスト』が削除されます。

Rangeオブジェクトで範囲を選択した後に値を入力(選択した範囲がセル1つのとき)

プログラム

Sub Selectionプロパティ04()
    Range("C4").Select
    Selection.Value = "テスト"
End Sub

プログラム説明
【VBA】【Selectionプロパティ】Rangeオブジェクトで範囲を選択した後に値を入力2

上図のようにSelectionプロパティはセル範囲だけでなく、単一セルでも用いることができます。

選択範囲の『セル数』・『先頭行・先頭列』・『最終行・最終列』・『行数・列数』を取得する

プログラム

Sub Selectionプロパティ05()
    Range("C4:G9").Select
    
    MsgBox "選択した範囲の中にセル数は" & Selection.Count & "個です"
    
    MsgBox "選択した範の先頭行は" & Selection(1).Row & "行目です"
    MsgBox "選択した範の行数は" & Selection.Rows.Count & "行です"
    MsgBox "選択した範の最終行は" & Selection(Selection.Count).Row & "行目です"
    
    MsgBox "選択した範の先頭列は" & Selection(1).Column & "列目です"
    MsgBox "選択した範の列数は" & Selection.Columns.Count & "列です"
    MsgBox "選択した範の最終列は" & Selection(Selection.Count).Column & "列目です"
End Sub

プログラム説明
【VBA】【Selectionプロパティ】選択範囲の『セル数』・『先頭行・先頭列』・『最終行・最終列』・『行数・列数』を取得する

少し複雑なプログラムです。

まず、『Range("C4:G9").Select』でセル範囲C4~G10を選択しています。
その後、選択した範囲の『セル数』・『先頭行・先頭列』・『最終行・最終列』・『行数・列数』を取得しています。

では、これから少し詳しくこのプログラムについて説明します。

『選択した範囲』のセル数の習得方法

選択した範囲のセル数は

Selection.Count

で取得することができます。セル範囲C4~G10はセルが30個あるので、『Selection.Count』は30となります。

【補足】
この『Selection.Count』で取得した値は変数に代入することもできます。
『Hensuu = Selection.Count』とすると、変数Hensuuに『Selection.Count』の値が代入されます。

『先頭行・先頭列』の習得方法

選択した範囲の左上のセルは

Selection(1)

で表されます。これを利用します。
先頭行は

Selection(1).Row

先頭列は

Selection(1).Column

で取得することができます。

『最終行・最終列』の習得方法

選択した範囲は左上からスタートし、右に向かって番号が振られていきます。最終列に行くと、次の行の左から番号が振られていきます(上の説明図のセル内に番号を振っています)。

左上の番号が『1』となります。そのため、選択した範囲の左上のセルは

Selection(1)

で表されます。
同様に、選択した範囲の右下のセルは

Selection(30)

で表されます。

この『30』は『選択した範囲』のセル数と同じになります。『選択した範囲』のセル数は『Selection.Count』で取得することができました。そのため、『Selection(30)』は

Selection(Selection.Count)

と表すこともできます。これを利用することで、『最終行・最終列』の習得することができます。
最終行は

Selection(Selection.Count).Row

最終列は

Selection(Selection.Count).Column

で取得することができます。

【補足】
選択した範囲のセル数は毎回異なるので、Selection(30)と表すよりSelection(Selection.Count)で表した方が良いです。

『行数・列数』の取得方法

選択した範囲の行数は

Selection.Rows.Count

選択した範囲の列数は

Selection.Columns.Count

で取得することができます。

選択範囲の左上、右下、左上、左下を取得する

プログラム

Sub Selectionプロパティ06()
    MsgBox "選択した範囲の左上の数字は" & Selection(1) & "です"
    MsgBox "選択した範囲の右下の数字は" & Selection(Selection.Count) & "です"
    
    MsgBox "選択した範囲の右上の数字は" & Selection(1).Offset(0, Selection.Columns.Count - 1) & "です"
    MsgBox "選択した範囲の左下の数字は" & Selection(1).Offset(Selection.Rows.Count - 1, 0) & "です"
End Sub

プログラム説明
【VBA】【Selectionプロパティ】選択範囲の左上、右下、左上、左下を取得する

選択した範囲の左上のセルは

Selection(1)

選択した範囲の右下のセルは

Selection(Selection.Count)

となりました。
では右上と左上のセルはどのように表せばよいでしょうか。

Offset関数を使うのです!

右上のセルは左上のセルから、列数-1の場所にあります。
そのため、列数を表す『Selection.Columns.Count』を用いて、

Selection(1).Offset(0, Selection.Columns.Count - 1)

となります。

左下のセルは左上のセルから、行数-1の場所にあります。
そのため、列数を表す『Selection.Rows.Count』を用いて、

Selection(1). Offset(Selection.Rows.Count - 1, 0)

となります。

補足説明

構文

Selectionプロパティの構文は次のようになります。

Applicationオブジェクト.Selection

ここで言いたいのは、SelectionプロパティとはApplicationオブジェクトの中にあるプロパティであるということです。
そのため、

Selection.Value = "テスト“

は正確には

Application.Selection.Value = "テスト”

となります。

返り値

ユーザーがセルを選択している時に、Selectionプロパティを用いると、Rangeオブジェクトが返されます。セルは単一のセルを選択しても複数のセル範囲を選択してもRangeオブジェクトが返されます。

Selectionプロパティの注意点

ユーザーがExcelファイル(Workbookオブジェクト)やエクセル内のシート(Worksheetオブジェクト)を選択している時に、Selectionプロパティを用いた場合、WorkbookオブジェクトやWorksheetオブジェクトを返すのではなく、SelectionプロパティはRangeオブジェクトを返します。

何も選択してない状態ではSelectionプロパティは空のオブジェクトであるNothingを返します。すなわち、Selectionプロパティは「単一セルや複数セル」を返すプロパティなのです。

スポンサーリンク