• 締切済み

SelectionChangeとChangeの違い

エクセルのシートイベントには、 ・Worksheet_Change ・Worksheet_SelectionChange がありますが、違いはなんでしょうか? ・Worksheet_Changeはセルの値が変わったら発動 ・Worksheet_SelectionChangeは、 セルの選択が変わったら発動なおかつセルの値が変わったら発動 と言うことでしょうか? ・セルの値が変わったら、Changeイベントの方が先に発動する。 であってますか?ご回答よろしくお願いします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

次のように実際にシートに仕込んでみます。 private sub Worksheet_Change(byval Target as excel.range) msgbox "Change " & target.address end sub private sub Worksheet_SelectionChange(byval Target as excel.range) msgbox "SelectChange " & target.address end sub で、次の操作を実際にご自分の手を動かして行ってみます。 1.セルの選択を変える 2.任意のセルに記入してEnterする 3.任意のセルに記入してCtrl+Enterする(あるいは数式バーのチェックボタンで入力を終える) 4.記入したセルでdeleteキーを押して削除する やってみるとわかること: ○選択セルが動くとselectionchangeが起こります。選択セルが動かなければ、selectionchangeは起こりません。 ○セルの記入が変化するとchangeが起こります。選択セルが動いたか否かは関係ありません。 ○セルに記入され、同時に選択セルが動くと、まずセルに記入されてからセル移動が起こります。 さらに、「具体的にどのセルを受け取って」マクロが作動しているのかも、よく観察して理解してください。

関連するQ&A

  • worksheet_changeがループする

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

  • linkとWorksheet_Change

    LINK してあるセルを ターゲットにして Worksheet_Change をとっても 反応しない。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub   Msg = MsgBox("bが変更されました。", vbOKCancel)   tensou この$B$2は 他の部分からデータを得ています。時間でこのセルの値が自動で変化するのですが Worksheet_Change 起きないのか、捉えられないのか、分かりかねますが その下$B$3に =$B$2 もしくは =Value($B$2) で 飛ばして Target.Address <> "$B$3"にしても 同じ。 このLINKした セルの Worksheet_Change イベントを ひらう方法を お教え願えませんでしょうか IF 分を =で置き換えても同じでした。

  • [Excel VBA 2003] Worksheet_Changeでセルの削除・挿入を識別する方法

    Excel VBAのWorksheet_Change関数でセルが削除・挿入されたことを識別することはできますか?Worksheet_Change以外でも方法があれば教えてください。

  • excel 図形を貼り付けた時のイベント

    Excelでインターネットから図をインポートし、自動で周囲ぼかしを付けたいのですが、図をシートに貼り付けた時に「Worksheet_SelectionChange」「Worksheet_Change」などのイベントが発生せず自動化ができません。貼り付けで発生するイベントはないのでしょうか?

  • Excel VBA あるセルでENTERを押すと特定のセルへ移動したい

    Excel VBAで例えばセル"A2"をセレクトしている状態で 「ENTER」を押すとB5に自動的にセレクトすることはできないでしょうか? Worksheet_Change関数を使おうと思ったのですが "A2"の中身が変化しないと発動しません。 Worksheet_SelectionChange関数を使って"A2"を選択している状態で「ENTER」を押すと"A3"が選択されることを利用し、 「"A3"が選択されたら"B5"に飛ぶ」 も考えたのですが、マウスやキーボード操作で"A3"を 選択すると"B5"に飛んでしまうので、これも使えません。 何か対策案はないでしょうか。ご教授よろしくお願いします。

  • worksheet_changeの無効化

    worksheet_changeを使って、特定のセルの値が変更されたときに、処理をしています。 例えば、セルA1が変更されたときに3万回のセルに値を入力する繰り返し操作をするマクロを書いていると 1回目のセルに入力される操作をしたときにworksheet_changeがおそらく反応しています。 3万回のセルに値を入力する繰り返し操作中だけ、worksheet_changeが起きないようにはできないでしょうか?

  • Excel 2003 VBA Worksheet_Changeの動作速度について

    Excel2003を使用しています。 セルに入力した文字列の前後のスペースをカットする為にTRIMを用いて Private Sub Worksheet_Change(ByVal Target As Range) Target.Value = Trim(Target.Text) End Sub と記述したところ、動作は思惑通りなのですが、処理速度が異様に重いです。 私の環境(VISTA Home Premium,Core2 Duo 2.20GHz)では、セル値を変更した後必ず3~5秒処理が固まります。 不本意ですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Value = Trim(Target.Text) End Sub と、Worksheet_SelectionChangeを使うと全くストレスを感じず処理されますが、セルを再度選択してやらないとTRIMされませんし…。 私の環境だけがWorksheet_Changeでの処理が遅いのでしょうか? よく似た環境のみなさんはどうでしょう? 原因が分からなくて気持ち悪いです… 私個人の環境の問題? Excel2003の問題? 記述の問題? 何かご存じの方居られましたらよろしくお願いします。

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

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

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

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

  • カーソルを動かしたときは発動させたくありません

    エクセルの Worksheet_SelectionChangeイベントで --------------------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "$A$1です" End If End Sub --------------------------------------------------------- のコードを標準モジュールに書いて、A1セルをクリックすると、MsgBoxが表示させますが、 B1セルから、キーボードの「→」キーを押してA1に移動してもMsgboxが表示されてしまいます。 クリックした時はマクロを発動させたいのですが、カーソルを動かしたときは発動させたくありません。 そんな事は可能でしょうか?

専門家に質問してみよう