Selectionプロパティとはユーザーが選択しているセルを返すプロパティです。
選択している範囲によってSelectionプロパティが返す値が変わります。
例えば、
- A1セルを選択している状態
- A1~C3のセル範囲を選択している状態
Selectionプロパティの内容はRange("A1")を指すことになります。
Selectionプロパティの内容はRange("A1:C3")を指すことになります。
となります。
では実際にどのように使用するのかを具体的にプログラム例で見ていきましょう。
Selectionプロパティを用いた様々なプログラム
ユーザーが選択した範囲に値を入力
プログラム
Sub Selectionプロパティ01() Selection.Value = "テスト" End Sub
プログラム説明
一番シンプルなプログラムです。このプログラムではユーザーが選択した範囲に対して、
で文字列「テスト」を入力しています。
例えば、ユーザーがセル範囲C4~G10を選択したとします。その後、プログラムを実行すると、セル範囲C4~G10に文字列「テスト」が入力されます。
『Selection.Value = "テスト"』の『.value』を省略して、『Selection = "テスト"』としてもプログラムは正常に動作します。
Rangeオブジェクトで範囲を選択した後に値を入力
プログラム
Sub Selectionプロパティ02() Range("C4:G9").Select Selection.Value = "テスト" End Sub
プログラム説明
このプログラムでは
でセル範囲C4~G10を選択しています。
そのセル範囲に対して、
で文字列「テスト」を入力しています。
Rangeオブジェクトとは「セル」を表すオブジェクトです。『Range("C4:G9")』は『セル範囲C4~G10』表すRangeオブジェクトです。
選択した範囲の値を削除する
プログラム
Sub Selectionプロパティ03() Selection.Delete End Sub
プログラム説明
このプログラムではユーザーが選択した範囲の値を
で削除しています。
例えば、セル範囲C4~G10に文字列『テスト』が書いてあるとします。ユーザーがセル範囲C4~G10を選択し、プログラムを実行すると、文字列『テスト』が削除されます。
Rangeオブジェクトで範囲を選択した後に値を入力(選択した範囲がセル1つのとき)
プログラム
Sub Selectionプロパティ04() Range("C4").Select Selection.Value = "テスト" End Sub
プログラム説明
上図のように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
プログラム説明
少し複雑なプログラムです。
まず、『Range("C4:G9").Select』でセル範囲C4~G10を選択しています。
その後、選択した範囲の『セル数』・『先頭行・先頭列』・『最終行・最終列』・『行数・列数』を取得しています。
では、これから少し詳しくこのプログラムについて説明します。
『選択した範囲』のセル数の習得方法
選択した範囲のセル数は
で取得することができます。セル範囲C4~G10はセルが30個あるので、『Selection.Count』は30となります。
この『Selection.Count』で取得した値は変数に代入することもできます。
『Hensuu = Selection.Count』とすると、変数Hensuuに『Selection.Count』の値が代入されます。
『先頭行・先頭列』の習得方法
選択した範囲の左上のセルは
で表されます。これを利用します。
先頭行は
先頭列は
で取得することができます。
『最終行・最終列』の習得方法
選択した範囲は左上からスタートし、右に向かって番号が振られていきます。最終列に行くと、次の行の左から番号が振られていきます(上の説明図のセル内に番号を振っています)。
左上の番号が『1』となります。そのため、選択した範囲の左上のセルは
で表されます。
同様に、選択した範囲の右下のセルは
で表されます。
この『30』は『選択した範囲』のセル数と同じになります。『選択した範囲』のセル数は『Selection.Count』で取得することができました。そのため、『Selection(30)』は
と表すこともできます。これを利用することで、『最終行・最終列』の習得することができます。
最終行は
最終列は
で取得することができます。
選択した範囲のセル数は毎回異なるので、Selection(30)と表すよりSelection(Selection.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
プログラム説明
選択した範囲の左上のセルは
選択した範囲の右下のセルは
となりました。
では右上と左上のセルはどのように表せばよいでしょうか。
Offset関数を使うのです!
右上のセルは左上のセルから、列数-1の場所にあります。
そのため、列数を表す『Selection.Columns.Count』を用いて、
となります。
左下のセルは左上のセルから、行数-1の場所にあります。
そのため、列数を表す『Selection.Rows.Count』を用いて、
となります。
補足説明
構文
Selectionプロパティの構文は次のようになります。
ここで言いたいのは、SelectionプロパティとはApplicationオブジェクトの中にあるプロパティであるということです。
そのため、
は正確には
となります。
返り値
ユーザーがセルを選択している時に、Selectionプロパティを用いると、Rangeオブジェクトが返されます。セルは単一のセルを選択しても複数のセル範囲を選択してもRangeオブジェクトが返されます。
Selectionプロパティの注意点
ユーザーがExcelファイル(Workbookオブジェクト)やエクセル内のシート(Worksheetオブジェクト)を選択している時に、Selectionプロパティを用いた場合、WorkbookオブジェクトやWorksheetオブジェクトを返すのではなく、SelectionプロパティはRangeオブジェクトを返します。
何も選択してない状態ではSelectionプロパティは空のオブジェクトであるNothingを返します。すなわち、Selectionプロパティは「単一セルや複数セル」を返すプロパティなのです。