- ベストアンサー
セルを指定したVBA
お願いします。 以前、このカテゴリーの質問で、特定のセルをダブルクリックすると”○”が入力されるコードがあり、重宝させてもらっています。 ただ、シート全体で適用となっているため、どのセルをWクリックしても”○”が入力されます。 特定のセルのみ適応されるような範囲指定のVBAはどのように記述したらいいのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2のmerlionXXです。 特定の範囲に限定の場合、範囲指定にUnionを使わなくとも Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:C10,E1:F10")) Is Nothing Then Exit Sub MsgBox Target.Address Cancel = True End Sub で出来ますね。こっちの方が簡単ですね。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>特定のセルをダブルクリックすると >シート全体で適用となっているため の関係が矛盾した記述のように思うが。 ひょっとして、後者はSheet1でもSheet2でもSheet3・・でもイベントの発動が起こるということですか。 Sheet1の全セルでイベントが働く(語弊がありますが)ようだと、クリックしたセルがTargetでわかるので、そのアドレスを 限定し、その範囲外なら、処理を何もしないで抜ければよい。 IF 行範囲が範囲内、列範囲が範囲内 Thenとか範囲と Intersect(メソッドあり)するかどうかを判別とか。 「Intersect VBA」でWEB照会すると質問と似たような 解説が沢山でる。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=312058&rev=1 後者だとThisworkbookのイベントから、個別のSheet1などのイベントに鞍替えすればよいと思う。
お礼
imogasiさん お礼が遅くなりました。 imogasiさんのご回答含め、intersect VBAの解説サイトも 非常に役に立ちました。考えていたシート構成にもより 幅が生まれる結果になりました。 ありがとうございました!
- merlionXX
- ベストアンサー率48% (1930/4007)
特定の範囲に限定 範囲が、Range("A1:C10")とRange("E1:F10")の場合の例 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Union(Range("A1:C10"), Range("E1:F10"))) Is Nothing Then Exit Sub MsgBox "ダブルクリックされました。" Cancel = True End Sub 一つのセルだけに限定 Range("A1") だけの場合の例 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$A$1" Then Exit Sub MsgBox "ダブルクリックされました。" Cancel = True End Sub
- mitarashi
- ベストアンサー率59% (574/965)
お礼
mitarashiさん ありがとうございます。 他の類似する質問、非常に参考になりました。 気になった質問はスクラップしてゆきます。 ありがとうございました!
お礼
merlionXXさん 範囲指定のコードを何度か見直しまでしていただきまして 大変恐縮です。 よく理解できました。 次回からも応用してゆけそうです。 「すぐ回答ほしい」で質問していたのですが間に合いました。 ありがとうございました!