• ベストアンサー

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

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

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

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

masnoske
質問者

お礼

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

その他の回答 (1)

回答No.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回処理されてしまう」のです。