Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
セルの選択範囲の重複チェックについて
投稿日時: 18/07/12 12:00:30
投稿者: 河童TKO

こんにちは。
いつも大変お世話になっております。
 
セルの選択範囲の重複チェックについて教えてください。
 
シート上に予定表を入力する範囲に
「範囲_予定表」という名前を付けています。
 
この範囲内でセルが選択されているかチェックしたいと思っています。
 
Intersectを使用してアクティブなセルのみだと
範囲内かどうか判定できます。
 
しかし、判定はセルの選択範囲の全てで行いたいです。
任意に選択した範囲が予定表の範囲外にある場合はチェックしたいです。
 
任意で選択したセルがすべて特定の範囲内(範囲_予定表)にあるかどうか
チェックするにはどのようにすればよいでしょうか?
 
アドバイス、よろしくお願いいたします。
 
'ActiveCell(アクティブなセルのみだとOK)
If Application.Intersect(ActiveCell, Range("範囲_予定表")) Is Nothing Then
   MsgBox "予定表の範囲内を選択してください。"
   Exit Sub
End If
 
'Selection(選択範囲が何かおかしい?)
If Application.Intersect(ActiveCell, Range("範囲_予定表")) Is Nothing Then
   MsgBox "予定表の範囲内を選択してください。"
   Exit Sub
End If

回答
投稿日時: 18/07/12 12:45:19
投稿者: もこな2

とりあえず、ActiveCellは単一セルしかあり得ないので、

引用:
If Application.Intersect(Selection, Range("範囲_予定表")) Is Nothing Then
   MsgBox "予定表の範囲内を選択してください。"
   Exit Sub
End If
の間違いなのでしょうけど・・
河童TKO さんの引用:
しかし、判定はセルの選択範囲の全てで行いたいです。
任意に選択した範囲が予定表の範囲外にある場合はチェックしたいです。
ということですから、一部だけかぶってる場合はNGなんですよね?
 
Intersectメソッドは、重なってるセル範囲を返すから、一部でもかぶっていたらNothingにならないんですよね。
ウーン・・・私のスキルだとよい方法は思いつきませんが、やっつけで、
selection.cells.count と
Intersect(selection, Range("範囲_予定表")).cells.count
を比較して同じなら、Range("範囲_予定表")の中に収まっているっていうのはどうですか?

回答
投稿日時: 18/07/12 12:52:54
投稿者: もこな2

よく考えたらAddressを比較すればよさそうですね。

Sub test()
   If Not Intersect(Selection, Range("範囲_予定表")) Is Nothing Then
      With Selection
         If .Address = Intersect(.Cells, Range("範囲_予定表")).Address Then
            MsgBox "範囲内です"
         Else
            MsgBox "範囲からはみ出しています"
         End If
      End With
   End If
End Sub

回答
投稿日時: 18/07/12 13:48:31
投稿者: WinArrow
投稿者のウェブサイトに移動

手操作で選択した範囲をチェックする目的は?
 
選択したセル範囲をどのように取り扱うか
で、チェックする/しないが決まるのではないかと思いますが・・・

投稿日時: 18/07/12 14:08:57
投稿者: 河童TKO

こんにちは、もこな2様。
お返事ありがとうございました。
 
早速、試してみると希望通りの結果になりました。
 
Intersect(.Cells, Range("範囲_予定表")).Address
 
なるほど、Intersectで重複した部分のアドレスを
取得できるんですね。勉強になりました。
 
最近、vbaをつつくことが多くなったので、
また不明点ができたときは、よろしくお願いいたします。