• ベストアンサー

セルクリックでマクロ実行の構成について

office365 A.xlsmというファイルを開いたら sub auto_open() の中で MENUシートの B7,C7,D7… B8,C8,D8… に人の名前を抽出して貼り付けるマクロを動作させます←(B) 7行目、8行目共、基本1人の抽出ですが、 max3人くらいまで抽出される構成 B7セルからD8セルの範囲内で名前が表示される様になるので、 その中で自分の名前をクリックしたら、←(C) 自分に関係するファイルを開く様にしたい。 しかしながら (C)の内容をセルクリックでマクロ実行の構成 Private Sub Worksheet_SelectionChange(ByVal Target As Range) で指定していると (B)の実行中に(C)が動作してしまうので具合が悪いです。 (B)の処理には、セル内容削除や罫線追加などを実施するので7行目と8行目はクリックされまくる感じになります。 なので、 (B)の処理が全て終わったら、(C)のセルクリックでマクロ実行の内容を有効にしたいのですが、どの様な構成にしたらよいか教えていただきたく。 可能ならば、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) の中で、クリックしたセルに色をつけ、それ以外の人の名前が入っているセルは塗りつぶしなしにしたい こちらは、クリックしたアクティブセルの行と列は分かっているので、範囲内でアクティブ以外のセルを1つずつ塗りつぶしなしの処理をしたら良いかと思いますが、なんかスマートじゃないですね。 ホントは B7セルクリックしたら、7,8行を塗りつぶしなしにして クリックしたB7セルに色つけ としたいところです。 (B)のイメージマクロ sub auto_open() …略 Range("B7")="Aさん” Range("C7")="Bさん” Range("B8")="Cさん” end sub (C)のイメージマクロ Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'クリックしたセルに色付け Dim l as long Dim r as long Select Case Target.Interior.colorIndex Case Is = xlNone Target.Interior.colorIndex =8 End select 'ファイル開く処理 …略 End sub 上記(B)(C)のマクロに、可能な構成となる様に添削(コード追加)いただきたく。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

> (B)の処理には、セル内容削除や罫線追加などを実施するので7行目と8行目はクリックされまくる感じになります。 この部分のコードが実行される前に Application.EnableEvents = False にして 実行が終わったところで Application.EnableEvents = True としておけば、その間は Worksheet_SelectionChange が実行されることはありません。

3620313
質問者

お礼

ありがとうございます。 やりたい内容が無事解決できました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問の表現は複雑で、理解が大変。 回答は、文章で書いた方がわかりやすいと思って、 マクロの実行(シートのイベントをきっかけに行う実行に限る話をすると)で (1)イベントの種類で、処理は分かれる(当然)    優先劣後関係はあまりないが、少数あったような。 (2)時刻的に先にクリックした方がイベントとして優先 (3)Eventsによっては、Targetのセル番地が判る(返してくれる)から、それが思う範囲かどうかで、実行するしないを分けることができる。思う範囲かどうかは、Application.Intersectメソッドで判定。 https://excel-ubara.com/excelvba1/EXCELVBA402.html (4)イベント全体を、指定した間(解除するまでの間)止める。すべてのイベントで止まり、指定したあのイベントだけ止める、のは出来ないと思う。EnableEvents=False (Eventsとsが着く) ーー 処理のグルグル回りを避けるには(4)を使うことが多い。セルの値のChangeイベントなどの時などで 、VBAでどこかセルの値を変える場合などの場合。

関連するQ&A

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • VBA マクロを動かさない

    (1)ある行のセルを変更したら動くマクロがあります。  Private Sub Worksheet_Change(ByVal Target As Range) (2)ある行のセルに数値を入れるマクロがあります。  Private Sub CommandButton_Click() (2)のマクロが動くと(1)がその後に発動して上書きをしてしまうようです。 これを発動させないようにスキップするにはどうしたらいいのでしょうか?

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

    マクロで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 どなたかご存じの方教えて下さい

  • このマクロの説明をお願いします

    Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

  • エクセルvba  (ByVal Target As Range)について

    シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • エクセル マクロ ダブルクリックのイベント

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As range) というマクロをしても動きません。どうしてでしょうか? 他のsheetchaneとかのマクロは動くのですが・・ (ダブルクリックしてもセルが入力可能な状態になるだけです)

  • マクロについて

    マクロ初心者です。 エクセルのマクロで下記は何を示しているのでしょうか。 困っているのでもなんでもないのですが、周りにマクロが判る人がまったく居ないので質問させてもらいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) End Sub

  • VBA マクロの削除について教えてください

    VBEのWorksheet上にある、下記のコードが消えません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 全選択して、Deleteするのですが、消しても復活しています。 これ以上方法が思いつかないので、ご教示をおねがいします。

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

専門家に質問してみよう