• ベストアンサー

エクセルのマクロでワークシートチェンジについてお教えください

以前教えていただいたマクロで セルに入力があったら起動するマクロを作っています ・・・Private Sub Worksheet_Change(ByVal Target As Range)・・・ 今回お聞きしたいのは シート上にボタンを作っておいて そのボタンを押すたびに ワークシートチェンジ自体のマクロを発生する、しない を切り替える 方法を教えていただきたいのです  「発生している状態で作業をして  ボタンを押して発生させなくして コピーをして  別のシートに貼り付ける」というようなことをしたいのです  (ワークシートチェンジが発生している状態だと  コピーするための選択ができないので) わかりにくい部分がありましたら 細くさせていただきますのでよろしくお願いいたします

  • ennkai
  • お礼率54% (284/525)

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

こんばんは。 ---------------------------------------------- Private Sub CommandButton1_Click()  Application.EnableEvents = Not Application.EnableEvents  If Application.EnableEvents Then    CommandButton1.Caption = "Event ON"  Else    CommandButton1.Caption = "Event OFF"  End If End Sub -----------------------------------------  IF文以下5行は必ずしも必要ありません。 ●Wendy02さん、先日は色々ありがとうございました。 今回の件ですが、上記のコードでは拙いでしょうか。  

その他の回答 (5)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.6

こんにちは。 Wendy02さん、貴重な時間を割いてのチェック、感謝します。 いずれはWendy02さんのようにクラスでも何でもサクッと書けるようになりたいと思っています。 これからも宜しくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。onlyromさん。 >●Wendy02さん、先日は色々ありがとうございました。 >今回の件ですが、上記のコードでは拙いでしょうか。 そのお書きになったコードのWorksheet_Change側の、いくつか例を想定してみましたが、まったく、問題ないと思いますし、間違いもないと思います。私のものよりも簡単でよいと思いますし、イベント・ドリブン型マクロがエラーなどで、イベントが死んでしまっても、そのボタンで、イベントが復活しますね。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 たぶん、おっしゃっているのは、以下のようなマクロだろうと思います。 コントロールツール・ボタンは、トグルになっています。イベントが掛かっているときは、「ON」が出ていて、イベントが掛からない場合は、「Off」が表示されます。これは、イベント・ドリブン型のマクロのインスタンスをなくしてしまいます。私が、よく使うイベント・ドリブン型マクロです。 また、他には、#IF ステートメントで、マクロ全体を分岐させる方法がありますが、それはやむを得ない状況の時に限ります。 '---------------------------------- 'シートモジュール Private Sub CommandButton1_Click()  Static flg As Boolean  flg = Not flg  Call EventsOnOff(flg)  CommandButton1.Caption = Choose(CInt(flg) + 2, "ON", "OFF") End Sub '---------------------------------- '標準モジュール Dim myClass As New Class1 Sub EventsOnOff(flg As Boolean)  If flg Then  Set myClass.mySh = ActiveSheet  Else  Set myClass.mySh = Nothing  End If End Sub '---------------------------------- 'クラスモジュール (Class1) Public WithEvents mySh As Worksheet Private Sub mySh_Change(ByVal Target As Range)  MsgBox Time End Sub '----------------------------------

回答No.2

EnableEvents プロパティでイベント発生を操作できます。 ボタンではなくコピー処理のプロシージャに盛り込んだ方がスッキリすると思います。 (例) Public Sub MyCopy()   Application.EnableEvents = False   'ここにコピー処理を記述してください。   Application.EnableEvents = True End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

コントロールチェックボックスの CheckBox をシートにおいて、Change イベントを下記にようにしては如何でしょう? Private Sub Worksheet_Change(ByVal Target As Range)  If Me.CheckBox1.Value Then    MsgBox "Change"  End If End Sub

関連するQ&A

  • エクセルで、ワークシートチェンジのイベントを停止できますか。

    このようなマクロを作っています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$2" Then Exit Sub Range("B2").Copy Range("C2").Select ActiveSheet.Paste End Sub しかし、このままだとループしてしまいます。 それで、B1:B2をコピーしてC1:C2に貼り付けています。   マクロの中で、ワークとチェンジのイベントを停止したり、開始できれば良いなと思っています。こんなこと、できますか。教えてください。

  • エクセルVBA/シートのチェンジイベントを発生させない方法?

    Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "イベント発生" End Sub このワークシートがアクティヴになってるときに手入力された場合以外、チェンジイベントを発生させなくするにはどのような方法があるでしょうか? 標準モジュール記載の他のマクロでセルが変更された場合を無視したいのです。 よろしくお願いします。

  • エクセルマクロ(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

  • worksheet_changeがループする

    worksheet_change イベントでの質問です。シートに文字が入力された時に、他のセルに値をコピーしたいのですが、一つ目の値を代入した時点で、再びchangeイベントが発生して、この関数の頭に戻ってしまいます。実行中は、changeイベントを発生しないようにできないのでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i, j As Integer j

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • エクセル VBA Worksheet_Changeとコピー&ペースト

    いつも皆様には大変お世話になっております。 早速の質問ですが Worksheet_Changeを使ってマクロを組んでいるのと フォームを使ってマクロを組んでいます フォームのほうからのマクロで Sheet1のセルをコピーしてSheet2のセルに貼り付けをしたいのですが、 貼り付けができません。 フォームのほうからのマクロじゃなく手動でコピー&ペーストも利きません。コピーはできるのですがSheet2に変えたところ貼り付けができなくなってしまいます。 Worksheet_Changeのマクロを消すと動きました。どうにかならないでしょうか? ちなみにWorksheet_Changeの中のマクロは Private Sub Worksheet_Change(ByVal Target As Range) If Range("J48") = Range("J68") Then Range("J48").Interior.ColorIndex = xlColorIndexNone Else Range("j48").Interior.ColorIndex = 26 End If If Range("V48") = Range("V68") Then Range("V48").Interior.ColorIndex = xlColorIndexNone Else Range("V48").Interior.ColorIndex = 26 End If End Sub となっています。 何かいい解決法がありましたらご教授のほどよろしくお願いいたします。

  • マクロの削除方法を教えてください。

    ワークシートの2番目にデータを入力し、マクロでそのコピーをワークシートの4番目に挿入して、 不要な部分を削除して利用している為、次のマクロが残ってしまいます。 マクロ  Private Sub Worksheet_Change(ByVal Target As Range) 4番目のワークシートを作成する時、このシートのマクロを、削除する方法を教えてください。 Excel2010(Windows 7)を使用しています 宜しくお願い致します

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • エクセルでマクロを使って新規シートを作成する方法を教えてください!(条件あります)

    初めて質問するのですが、エクセルで原紙シートのマクロまで全てをコピーして新規のシートを作成させるにはどうしたらいいですか? 新規のシートの特定のセルに入力した時に新規シートが作成されるようにできますか? 原紙は Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Address = "$A$1" Then ActiveSheet.Name = Target.Value End If End Sub のマクロが現在できあがってます。これを残しつつできますか?よろしくお願いします!

専門家に質問してみよう