範囲で選択した場合、複数のセルを選択した場合、あるいはその組み合わせを行った場合などは、「セルの番地を1つずつ取り出す」と、応用が利きます。
例えば、
①複数選択したセルを、特定の行の下に追加して行く
②複数選択したセルを、特定のセルの中に追加して行く
という事例を見てみます。
Excelの完成図
図で見ると分かり易いですね。
①左のボタンは、最終行に追加されます。
②右のボタンは、セル内に追加されます。

コード
①複数選択したセルを、最終行に追加するコード
Sub 選択セルの値_特定列に並べて追加()
Dim 選択範囲 As Range
Dim セル番地 As String
'セルが選択状態ではない場合はマクロ終了
'例:図などのオブジェクトが選択状態で、セルが選択状態にない場合、など
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
'選択範囲(Selection)を、変数 [範囲選択] に代入
For Each 選択範囲 In Selection
'選択範囲から、1個の [セル番地] を抜き出す
セル番地 = 選択範囲.Address(False, False)
'2列目の最終行に追加
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = Range(セル番地).Value
Next 選択範囲
End Sub
②複数選択したセルを、セル内に追加するコード
Sub 選択セルの値_特定セル内に追加()
Dim 選択範囲 As Range
Dim セル番地 As String
'セルが選択状態ではない場合はマクロ終了
'例:図などのオブジェクトが選択状態で、セルが選択状態にない場合、など
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
'選択範囲(Selection)を、変数 [範囲選択] に代入
For Each 選択範囲 In Selection
'選択範囲から、1個の [セル番地] を抜き出す
セル番地 = 選択範囲.Address(False, False)
If Range("G6").Value = "" Then
'空欄ならば、そのまま追加
Range("G6").Value = Range(セル番地).Value
Else
'既に記入されていれば、元セルの値に加える
Range("G6").Value = Range("G6").Value & vbCrLf & Range(セル番地).Value
End If
Next 選択範囲
End Sub
解説
選択セルの [セル番地] を抜き出して、イミディエイトウィンドウで見てみます。
'選択範囲(Selection)を、変数 [範囲選択] に代入
For Each 選択範囲 In Selection
'選択範囲から、1個の [セル番地] を抜き出す
セル番地 = 選択範囲.Address(False, False)
'デバック
Debug.Print セル番地
Next 選択範囲
図のように、複数選択したセルの、[セル番地] が取り出せていますね。

最後に
いろいろ応用できますね。
・範囲で選択したセルの、書式設定を変更する
・セル番地の列を参照して、この列の場合はこの列に挿入
という場面も、この方式で解決します。


コメント