2013年4月09日
今回は、シート上で選択した範囲内の各セルに対して、処理をしたいと きに必須の処理です。 |
たとえば下図のようなデータがあるとします。 |
この範囲をすべて選択した場合、VBAからは単純に「selection」で取出すことができます。
先頭(左上)のセルは、selection(1)、その右はselection(2)、最後(右下)は、selection(20)で取出すことができます。
では下図のように、飛び飛びのセルを選択したときはどうでしょうか?
この場合には、以下のようなプログラムで取出すことができます。
sub test()
Dim num_areas As Long
Dim idx_areas As Long
Dim rngtmp As Range
Dim tmpLine As Variant
Dim tmpval As Variant
'selection: 選択しているセル範囲
'選択した範囲のうち連続した範囲の数を取出す
num_areas = Selection.Areas.Count
tmpval = ""
'すべての範囲に対して繰り返す
For idx_areas = 1 To num_areas
tmpLine = ""
'それぞれの連続した範囲内のすべてセルに対して繰り返す
For Each rngtmp In Selection.Areas(idx_areas)
'ここでは単純に範囲内のセルの値を取出す
tmpLine = tmpLine & rngtmp.Value & " "
Next
'行ごとに分けて表示
tmpval = tmpval & tmpLine & vbCrLf
Next idx_areas
'取出した結果を表示
MsgBox tmpval
end sub
|
実行結果は下図のようになります。 |
注意が必要なのは、「選択の仕方により結果
が変わる」ということです。今回は、以下の
順序で選択しています。
1.A1-E1をドラッグ
2.ctrlを押しながら、A2-B2をドラッグし、
D2-D4をドラッグ
3.ctrlを押しながら、C3をクリック
4.ctrlを押しながら、D4-D5をドラッグ
選択の順番でどのように変わるか、いろいろ
試してみてください。
ちなみに、すべてのセルを選択した場合にも、このプログラムで処理が可能で、下図のような結果になります。