• ベストアンサー

エクセル2003VBA

こんばんは。 マクロでコマンドボタンを押したときに、アクティブセルが指定した範囲にないとき、メッセージボックスを出したいです。 すみませんが教えてください。 よろしくおねがいします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 アクティブセルなら、#1 merlionXX さんのコードにおいて   If Intersect(Selection, .Range("A1:B2")) Is Nothing Then の Selection は ActiveCell の方がベターだと思いますが、 どうでしょう? Selection(複数のセルの場合があり得る)が指定範囲内にあるかどうかを 調べるなら、Union を使う方法があります。 例えば、指定範囲を A1:C10 とし、B2:F20 を選択した状態でボタンを クリックしたとき、「範囲外」とするならこんな感じです。 つまり、範囲内も範囲外もともに Selection に含まれた場合は、範囲外と するコードです。   ' 指定した範囲   Const ADDR As String = "$A$1:$C$10"      ' ※シェープにマクロを割り当てる場合は、次行のような   '  エラー処理が必要      ' 終了条件:: Select されているものがセルではない   If UCase$(TypeName(Selection)) <> "RANGE" Then Exit Sub      ' Range(ADDR) と Union(Selection, Range(ADDR)) のアドレスを比較し、   ' 同一なら Selection は完全に Range(ADDR) に含まれる   ' 異なれば範囲外   If Range(ADDR).Address <> Union(Selection, Range(ADDR)).Address Then     MsgBox "範囲外です", vbCritical   End If ご参考までに。

spaghetti09
質問者

お礼

丁寧に有難う御座います。 奥が深い。。 テクニック集みたいな本見てるんですが、 その本だとそのテクニックを使う場面は余りなくって、 あるお題に対してプログラムするとき柔軟性が足りなくなっている感じがしてきました。そもそも私の理解度が浅いかもしれませんが。。 とても助かりました。ありがとうございます。より勉強します。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

指定した範囲=Range("A1:B2")の場合 With ActiveSheet If Intersect(Selection, .Range("A1:B2")) Is Nothing Then MsgBox "範囲外" End If End With

spaghetti09
質問者

お礼

回答有難う御座います。 できました。とてもたすかりました。

関連するQ&A

専門家に質問してみよう