• 締切済み
  • 暇なときにでも

SelectionChangeとChangeの違い

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数13834
  • ありがとう数0

みんなの回答

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

次のように実際にシートに仕込んでみます。 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

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

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

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

    エクセルの 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が表示されてしまいます。 クリックした時はマクロを発動させたいのですが、カーソルを動かしたときは発動させたくありません。 そんな事は可能でしょうか?

  • EXCEL Worksheet_SelectionChangeイベントについて

    EXCELのVBAについて教えて下さい。 EXCEL の Worksheet_SelectionChange を、必要に応じて、ENABLEにしたりDISABLEにしたりできないでしょうか? どこかのセルを参照したりして、有効か無効かを判断するしかないでしょうか? ?????.enabled = true,falseで 有効・無効を切り替えできればと思っていますが。 分かる方がいらっしゃれば、教えて下さい。 よろしくお願いします。

  • 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  (ByVal Target As Range)について

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

  • worksheet_changeがループする

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

  • SelectionChangeイベント 文字列エラ

    エクセルvbaなのですが セルをクリックしたときに、該当する値ならメッセージを表示させる際に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = 1Then MsgBox "" End If End Sub ならエラーにならずに動くのに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = "運賃" Then MsgBox "" End If End Sub のように文字列にすると、型が一致しません。 と言うエラーになります。 If Target.Value = "運賃" Then の時でも、空白セルや数値が入ったセルをクリックした際はエラーになりません。 どのような型にすればいいのでしょうか? 実際、「運賃」と言う値が入ってるセルをクリックしても同じエラーが発生します。

  • シートのクリックイベントは拾えないのか?

    ExcelのVBAに関する質問です。 さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。 Worksheetのイベントには BeforeDobuleClick や BeforeRightClick はあるのに Click や onClick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには Click イベントがあるのですが、Worksheet になぜかありません。 これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも SelectionChange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、 ・キーボード操作でセルを移動してもイベントが発生する ・現在選択しているセルをクリックしてもイベントが発生しない と、厳密はマウスでクリックしたときと同じ動作になりません。 確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり Click に相当するようなイベントで処理したいです。 どうにかしてWorksheetでクリックイベントを拾うことはできないのでしょうか?

  • 複数のセルを選択しているかを取得するプロパティは?

    SelectionChangeイベントで 複数のセルを選択しているかを取得するプロパティってないのでしょうか? 今は、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Address) > 5 Then MsgBox "複数のセルが選択されています" End If End Sub こうしていますが、行数が多くなると文字も多くなってしまうので、このコードでは対応できません。 Rangeオブジェクトに何個セルが入ってるかを知る方法はありますか? ウォッチのTargetのcellsを見ても、どう見ればいいのかわかりません

  • エクセルVBAについて

    エクセルVBAについて range("B5") = 1行の、選択したセルの値 というようなマクロを作成したいと思っています。 というのも、B5セルの値が、1行で選択したセルの値に変化できればと思っています。 ちなみに下のようなコードを書いてみたのですが、うまくいきません orz Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("B5") = Rows(1).ActiveCell.Value End Sub 初心者で申し訳ありませんが、よい方法がありましたら、 よろしくお願いいたします。