Worksheet_ChangeイベントがLINKしたセルに反応しない問題の解決方法

このQ&Aのポイント
  • 質問者は、LINKしてあるセルをターゲットとしたWorksheet_Changeイベントが反応しない問題に直面しています。
  • 質問者は、セルの値が自動で変化する場合にWorksheet_Changeイベントが起きないか、捉えられないかどうか不明です。
  • 質問者は、セルの値が変更された場合にMsgBoxを表示することや処理を行うための方法を知りたいとしています。
回答を見る
  • ベストアンサー

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 分を =で置き換えても同じでした。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

式の計算結果が変わってもChangeイベントは起こらないのでは? 代替策を考えてみました。値が変わるという事は再計算が行われる訳なので... Dim previousValue As Variant Private Sub Worksheet_Calculate() If Me.Range("B2").Value <> previousValue Then MsgBox "bが変更されました" previousValue = Me.Range("B2").Value End Sub モジュールレベルの変数だと何かの拍子に消えてしまうかもしれないので、それが嫌なら前の値を作業用シートに記録しておけば良いでしょう。ご参考まで。

007itochan
質問者

お礼

恐縮です Calculate と Value までは 行き着いたのですが LINKされた セルの 値が 取れなくて ありがとうございました

関連するQ&A

  • 「Worksheet_Change」で2つの操作を

    お世話になります。 当方、エクセルの超初心者です。 仕事で、ある作業表の作成を任されたのですが、一部が思い通りに動作しません。 最初は「例1」のような記述によりエラーしました。 【例1】 Private Sub Worksheet_Change(ByVal Target As Range) (内容1) End Sub Private Sub Worksheet_Change(ByVal Target As Range) (内容2) End Sub その後、過去の回答にあった類似案件を参考に「例2」のように書き換えましたが、 実行されるのは1つ目のみで、2つ目の内容は無視され、困っております。 【例2】 Private Sub Worksheet_Change(ByVal Target As Range) (内容1) (内容2) End Sub ちなみに実データは以下の通りです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub If Intersect(Target, Range("k6:k55")) Is Nothing Then Exit Sub If Target.Value = "" Then Target.Value = "○" Else Target.Value = "" If Target.Count <> 1 Then Exit Sub If Target.Column <> 2 Then Exit Sub If Target.Row < 6 Or Target.Row > 45 Then Exit Sub Call ShowCalendarFromRange2(Target) End If End Sub 見様見真似で作ったため、恥ずかしながら基本が全く理解できていません。 恐らく簡単なミスだと思うのですが、自力では解決方法を探し出せませんでした。 何とか2つの内容が実行できないものでしょうか。 どうか、お知恵をお貸し下さい。

  • WorkSheet_Changeを2つ反映させる

     下記のコードをWorkSheetで2つ反映させるにはどうしたらいいでしょうか?どちらか一つなら反映するのはわかりますが、どう名前を変更すればいいのかお教え願えませんでしょうか? windows7・SP1 Office2010 Private Sub WorkSheet_Change(ByVal Target As Range) If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub '検査範囲 Application.EnableEvents = False '再帰実行の停止 If Range("C1").Value <> Sheets("祝祭日").Range("A1").Value Then MsgBox ("祝日の設定を反映するため年度を同じにしてください。") End If Application.EnableEvents = True End Sub Private Sub WorkSheet_Change(ByVal Target As Range) Dim MyRow As Long Dim MyCol As Integer MyRow = Target.Row MyCol = Target.Column With Worksheets("メイン・1").Select If MyRow = 1 And MyCol = 7 Then If Target = 4 Then 'または If Target = 1 Then メインデータの復元 '動かしたいマクロ名 End If End If End With End Sub

  • VBA/Worksheet_Changeがうまくいかない

    エクセル2000です。 以下のワークシートチェンジイベントがうまくいきません。 Targetに値が入る場合は問題ないのですが、TargetをクリアしてもRange("F5").MergeAreaがクリアされません。 Targetをクリアした後、TargetをダブルクリックしてからEnterキーを押せばRange("F5").MergeAreaがクリアされるのですが、いちいちそうさせるわけにもいきません。 どうしたらよいのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$5" Then Exit Sub If Target.Value <> "" Then Range("F5").Value = Range("D42").Value Else Range("F5").MergeArea.ClearContents End If End Sub

  • Worksheet_Changeが動かない

    エクセル自動実行のマクロを作成中にうまく動かないので サンプルをコピーして、変更してみたのですが そのサンプルも動いません、マクロとは違う何か悪いのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim intColor As Integer If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("B2:B11")) Is Nothing Then Exit Sub Select Case Target.Value Case Is <= 20 intColor = 3 Case 21 To 40 intColor = 46 Case 41 To 60 intColor = 9 Case 61 To 80 intColor = 10 Case Is > 80 intColor = 5 End Select Target.Font.ColorIndex = intColor Application.EnableEvents = True End Sub

  • worksheet_changeがループする

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

  • エクセル ラジオボタンでWorksheet_Change

    表題の質問をさせていただきます。 ワークシートに以下を記述しました。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Range("A1") Case "1" MsgBox "1です。" Case "2" MsgBox "2です。" Case Else MsgBox "3です。" End Select End Sub A1に手入力をすると無事に動作します。 しかし、ラジオボタンを用意して「リンクするセル」をA1に設定した場合は動作しません。 (ラジオボタンは3つで表示される数値は1・2・3です) Worksheet_Changeは手入力での変更時にしか動作しないのでしょうか。 どうにかラジオボタンによる動作方法をご教授願います。 エクセル2003です、よろしくお願いします。

  • WorkSheet _Change を使って

    たびたびお世話になります。 worksheet_changeを使うマクロを作成しています。 sheet1で入力されたデータがsheet2にあるデータベースの文字と一致した場合、sheet1の該当セル(入力した部分)の色を変えます。 もしそのセルの内容が変更、削除された場合は塗りつぶしなしに戻します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sTitle As String sTitle = Target.Value If sTitle = "aaa" Then Target.Interior.ColorIndex = 7 Else Target.Interior.ColorIndex = xlNone End If End Sub このコードで、「aaaという文字を入れたら色を変える/削除・変更されたらは塗りつぶしなし」という動作はできました。 しかしその後、aaaに当たる項目が増え、項目自体を変更する可能性も増えたので、上記のように別シートにデータベースを作ることにしたのです。 このコードを基にしてプログラムを組んだのですが、うまく参照が出来てないようでコンパイルエラーになってしまいます。 アイディアでも良いのでアドバイスをお願いします。

  • Worksheet_Changeについて

     特定のマクロの前後でWorkSheet_Changeを終了し再開させる方法がありましたらお願い致します。 Windows7 SP1 Office2010 Private Sub WorkSheet_Change(ByVal Target As Range) Dim c As Range For Each c In Target Select Case c.address(0, 0) Case "C1" If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub '検査範囲 Application.EnableEvents = False '再帰実行の停止 If Range("C1").Value <> Sheets("祝祭日").Range("A1").Value Then MsgBox ("祝日の設定を反映するため年度を同じにしてください。") End If Application.EnableEvents = True Case Else Select Case c.address(0, 0) Case "G1" If Range("G1") = 4 Then '4月データの表示 Dim ret As Integer ret = MsgBox(Format(ActiveSheet.Range("G5").Value, "ge年mm月") & "の勤務割表の編集&入力保存データを元に表示します。" & vbCrLf & "よろしいですか?", _ vbOKCancel + vbQuestion, "勤務割表表示切替確認") Select Case ret Case vbOK UserForm8.Show vbModeless UserForm8.Repaint 当月データのクリア メインデータの復元4月 編集データの復元4月 Sheets("メイン・1").Select Unload UserForm8 Sheets("メイン・1").Range("G1").Select ActiveCell.FormulaR1C1 = "4" ※ ここで終了ないし一時停止 図形の貼付け ※ここで再開させたいのですが? Case vbOKCancel Exit Sub End Select ElseIf Range("G1") = 5 Then '5月データの表示 ret = MsgBox(Format(ActiveSheet.Range("G5").Value, "ge年mm月") & "の勤務割表の編集&入力保存データを元に表示します。" & vbCrLf & "よろしいですか?", _ vbOKCancel + vbQuestion, "勤務割表表示切替確認") Select Case ret Case vbOK UserForm8.Show vbModeless UserForm8.Repaint 当月データのクリア メインデータの復元5月 編集データの復元5月 Sheets("メイン・1").Select Unload UserForm8 図形の貼付け Case vbOKCancel Exit Sub End Select End If End Select End Select Next End Sub

  • Excel VBA Worksheet_Change イベントについて

    Excel VBA Worksheet_Change イベントについて質問です。 セルH8とI8を結合し、入力規則よりリストボックスを配置しました。 本シートにWorksheet_ChangeをVBAで作成しましたが、 セルH8:I8をDeleteすると実行時エラー13が発生します。 If Target = "" then exit sub end if や If Target.value = "" then exit sub end if や If Target <> "" then 処理 end if としても対処できませんでした。 よい対処方法のアドバイスよろしくお願いします。

  • WorkSheet _Change について

    いつもお世話になっています。 今、セルにある特定の文字列が入力されたら、セルの色を変えるという処理を作成しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sTitle As String sTitle = Target.Value If sTitle = "aaa" Then Target.Interior.ColorIndex = 16 End If End Sub コードはこんな感じです。(動作確認済み) たしかに特定の文字列を察知してシートの色を変えることはできるんですが、今作成しているものは随時セルの中身が更新されるのです。 そこで、別の文字列が入力されたら(もしくは文字列が削除されたら)もとの白色に戻る、という処理はできますでしょうか。

専門家に質問してみよう