• ベストアンサー

エクセルのマクロでセル選択の条件式の書き方

いつもお世話になりありがとうございます。 Excel97です。 Worksheet_SelectionChangeマクロで、 Range("B2:D11")内のセルが選択されたときに動くマクロを書きたいのですが、条件式を With ActiveCell If .Row < 12 And .Row > 1 And .Column < 5 And .Column > 1 Then '実行するマクロ End If End With とIfの行を And、And、And で長々と書かず、Range("B2:D11")を使うなりしてもっと簡略な記述方法はないでしょうか? ご教示いただければ幸いです。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

下記のコードで如何ですか? Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Not Application.Intersect(Range("B2:D11"), Target) Is Nothing Then   '実行するマクロ End If End Sub

AQUALINE
質問者

お礼

うわー、すごい! Application.Intersectって初めて見ましたが期待どおりです。勉強になりました。ありがとうございます。 最後に一つだけ教えてください。 if Not と Nothingということは、多分「セル移動先が指定レンジ内に無いということが無ければ」っていうような二重否定になっていますよね? どうしてなのでしょうか? よかったらお教えくださいませんか?

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> If Not と Nothingということは、多分「セル移動先が指定レンジ内に無い > ということが無ければ」っていうような二重否定になっていますよね? > どうしてなのでしょうか? そんな感じもしますが「二重否定」とはちょっと意味が違いますね。 まず、ヘルプで「Intersect メソッドの使用例」で使い方を理解してくさい。 その上で、今回の If Not Application.Intersect(Range("B2:D11"), Target) Is Nothing Then となっているのは、Target つまりセル選択範囲(今回のイベントは1つのセルと限りませんのでTargetを使うときは、注意が必要です。)と Range("B2:D11")の共有セル範囲が「無い場合」にIntersectは、Nothingを返すという ことですから、「共有セル範囲」が「有る場合」に処理したいことがあるということ ですから Not を付けることになります。 つまりIntersectが「Nothingでないとき」ということです。 ですから、指定した2つの範囲で、重なる部分が、あれば、If文が実行されます。

AQUALINE
質問者

お礼

くわしいご説明をありがとうございました。 もっと勉強します。 ありがとうございました。

  • wan-chan
  • ベストアンサー率13% (169/1255)
回答No.1

If Range("C8:J9").Select = true Then '実行するマクロ End If こんな感じで出来ましたけど、 Excel97では試していません。 Excel2000です。

AQUALINE
質問者

補足

残念ながら駄目でした。 Range("C8:J9")全体が選択されてしまい、それ以外は選択できなくなりました。 やはり97と2000ではちがうのですね。

関連するQ&A