• ベストアンサー

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

いつもお世話になりありがとうございます。 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

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • エクセルVBAでクリックしたセルのみ書式を変えたいのです。

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Row <= 11 And Target.Column <= 11 Then With Selection .Interior.ColorIndex = 3 .Font.ColorIndex = 2 .Font.Bold = True End With End If End Sub これで出来るのですが、問題は別のセルに移動しても書式は変ったままなのです。(当り前ですが) 書式を変えるのはあくまで選択されている間だけにしたいのです。 どのようにすればよいのでしょうか? エクセル97です。

  • エクセル2003 VBAでセル移動

    いつもお世話になります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 9 Then If Target.Column = 3 Then Cells(Target.Row, 4).Select ElseIf Target.Column > 5 Then Cells(Target.Row + 1, 1).Select End If End If End Sub これで、B列からC列を飛ばしてD列にセル移動して取りあえずの目的は達成しているのですが、 D列からB列には方向キー移動してくれません。Target.Columnが3になるんで当たり前なんですが・・・ B列の入力ミスがあるときマウスで移動させるか、A列まで戻ってから方向キーで上に上がるかです。 何かいい方法ありませんでしょうか。D列から方向キーで戻るときも、出来ればC列を飛ばしてほしいです。 よろしくお願いします。

  • Excel セルをクリックするだけで入力(エクセル2003)

    http://questionbox.jp.msn.com/qa915096.html からの転載で申し訳ありません。 この中で、jindonさまの方法で、2つの文字の入れ替えはできました。 ------------------------------------------------ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Row=1 And .Column=1 Then If .Value = "○" Then .Value = "" Else .Value = "○" End If End If End With End Sub ------------------------------------------------ そこで、例えば○△×のように、順番に3つの文字を入れ替えるにはどう記述すればよいでしょうか? よろしくお願いいたします。

  • セルを選択するマクロ(エクセル)

    Sub test() x = ActiveCell.Row y = ActiveCell.End(xlToLeft).Column z = ActiveCell.End(xlToRight).Column Range(Cells(x, y), Cells(x, z)).Select End Sub アクティブセルが含まれている行のみで、データが入力されている連続したセルを選択状態にするマクロとして、上記を考えました。 上記を違った形でもっと簡潔に表すことは可能でしょうか?

  • シングルクリックでフォームが表示されない

    windowsXP  Excel2000 でマクロを作成している超初心者です。 あるサイトの暦で日付を入力するマクロですが、1枚のシートに 1)と 2)を併記して実験したところ正常に表示できました。 2)をシングルクリックで表示したいのですができません。なぜでしょうか? 2)はいかにも稚拙です。もっと整理したいのですが方法が分かりません。以上2点よろしくご指導ください。 -------------------------------------------------------------------- 1)シングルクリックで UserForm1を正常に起動できました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示 Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 22 And Target.Column > 2 And Target.Column < 4 Then UserForm1.Show End If If Target.Row > 22 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If End Sub ------------------------------------------------------------------------- 2)ダブルクリックでしか正常に表示されません。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range)’ 起動しない Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '起動した Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 23 And Target.Column > 1 And Target.Column < 3 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 23 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 14 And Target.Column < 16 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 16 And Target.Column < 18 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 18 And Target.Column < 20 Then Call ShowCalendarFromRange2(Target) End If End Sub ----------------------------------------------------------------------- 3)'これがサイトにあった例で、これを元に上のスクリプトを作りました。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セル選択時は無視 ' If Target.Count <> 1 Then Exit Sub ' A列以外は無視(今回サンプルの例) ' If Target.Column <> 1 Then Exit Sub ' カレンダーフォームを起動する ' Call ShowCalendarFromRange2(Target) 'End Sub ---------------------------------------------------------------

  • VBA チェンジイベント 別シートにデータ転記

    お世話になります。チェンジイベント初心者です。 同一BOOK内の特定のコラムのセルを選択した場合に、自動的に他のシートの特定のセルにデータを転記させたいのですが、どう書けばよいのか分かりません。添付の画像と下記マクロをご覧になって下さい。 -マクロ- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Cells(ActiveCell.Row, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(ActiveCell.Row, 4) = Cells(ActiveCell.Row, 2) End If End Sub メインのシートは[01]です。このシートのC4を選択し、次に[02]のA列にあるセルを選択すると、[02]のA列・B列のデータがC4・D5に転記されるようにしたいのですが、画像にあります通り[02]のA5を選択してしまうと、[01]のC5・D5に転記されてしまいます。 どのようにすれば、[01]でアクティブにしておいた行の3列目、4列目に転記が行われるのでしょうか? よろしくご指南くださいませ。

  • 結合されたセルを列方向に検索したい

    excel2003 結合されたセルを列方向に検索したい Bセルで同じ文字列が入っているセルをダブルクリックすると、順繰りに検索する。 下記が、マクロの内容です。 ------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Err GoTo Myerr: Dim MyRange As Range Dim FirstRow As Integer Application.EnableEvents = False If Target.Column = 2 And Target.Value <> "" Then If Target.Row = Range("B" & Rows.Count).End(xlUp).Row Then FirstRow = 1 Else FirstRow = Target.Row End If With Range("B" & FirstRow & ":B" & Range("B" & Rows.Count).End(xlUp).Row) Set MyRange = .Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) If FirstRow = Target.Row Then Set MyRange = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) MyRange.Select Else MyRange.Select End If End With End If Application.EnableEvents = True Myerr: Application.EnableEvents = True End Sub ------------------------------------------------------------------------- 上記内容で、単独セルであれば動作するのですが、 行方向に結合されている(B1とB2が結合されている)セルをダブルクリックすると 実行時エラー’13’: 型が一致しません。 というエラーが発生します。 上記マクロでどこを修正したらよいのか、教えていただきたく。 B列は、結合されたセル、単独のセルが混在しています。

  • エクセルのカーソル移動 横スクロールを最後の入力列まで

    エクセルのカーソル移動について エクセルシートのコードはどこから貼り付け出来るのですか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Taget.Column=11 Then ActiveCell.Offset(1,-10).Select End If End Sub

  • マクロ、カーソルの相対移動

    下記マクロはカーソルの相対移動で教えいいただいたものです。 セルに値を入力しないで、Enterを押下した時もこのように動作させるためにはどのように記述したらいいでしょうか。教えてください。よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) if Target.Column = 2 Then Cells(Target.Row,5).Select if Target.Column = 5 Then Cells(Target.Row,7).Select if Target.Column = 7 Then Cells(Target.Row + 1, 2).Select End Sub

専門家に質問してみよう