こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

セルを飛び飛びに選択した時の要素の指定方法

たとえばA2とC2の2つのセルを選択した時、1つ目のセルは Selection(1)で指定できますが、2つ目のセルは Selection(2)で選択できません。Selection(2).Addressの結果は、$A$3になります。
選択したセルをUnionでまとめても結果は同じです。
飛び飛びのセルでは、こういう使い方はできないのでしょうか?
Excel2010です。

投稿日時 - 2018-11-22 12:08:50

QNo.9560490

困ってます

質問者が選んだベストアンサー

>2つ目のセルは Selection(2)で選択できません
本当ですね、初めて気が付きました。
無理やり
MsgBox Split(Selection.Address, ",")(1)
では

投稿日時 - 2018-11-22 13:28:19

お礼

ありがとうございます。
どうやらAreasコレクションを使えば良いと分かりました。
With Selection
add = .Areas(.Areas.Count).Address
End With

投稿日時 - 2018-11-22 14:50:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>たとえばA2とC2の2つのセルを選択した時、1つ目のセルは Selection(1)で指定できますが、

「Selectionの引数」が正常に機能するのは「領域が1つの時だけ」です。

従って「Selection(2)」は「1つ目の領域の、2番目のセル」つまり「A2の1行下のA3」になります。

「1つ目の領域」は「1行1列」なので、「2番目」「3番目」は「1行下」「2行下」になります。

ここで問題になるのは「指定したセル番号が、選択範囲の外でも構わない」と言う事です。

>2つ目のセルは Selection(2)で選択できません。Selection(2).Addressの結果は、$A$3になります。

「Selection(2)」は「先頭領域の2つ目のセル」ですから「A3セル」を示します。

>飛び飛びのセルでは、こういう使い方はできないのでしょうか?

選択範囲が「飛び飛び」かどうかは「Selection.Areas.Count」で判ります。

飛び飛びになっている場合は、この値が「2以上」になります。

そして、二つ目の領域を操作する場合は
Dim c As Range
Set c = Selection.Areas.Item(2)
のように「2つ目の領域をRange変数に代入」して、変数cを操作します。

例えば
Dim c As Range
Set c = Selection.Areas.Item(2)
c.Value = 10
とやれば、2つ目の領域の全セルが10になります。

なお「2つ以上の領域が重なっている場合」には、注意が必要です。

例えば、選択範囲が「A1:C10の領域とC8:D15の領域」だった場合、重なっているC8、C9、C10の3つのセルは「1番目のAreasにも、2番目のSreasにも居る」ので、Serection.Countの値は「実際より3つ多い値の46」になります。

これが問題になるのは「全部の選択領域を、セル1つづつ、順に処理する」というプログラムを書いた場合で、重なってる「C8、C9、C10」の3つのセルは「2回処理されてしまう」のです。

投稿日時 - 2018-11-22 14:46:07

あなたにオススメの質問