• ベストアンサー

エクセル Worksheet_Calculate

Worksheet_Calculate()  ですが、A:4 から h:4 だけ 反応する。 それ以外は、 Exet Sub で Calculate を 抜ける。 この範囲指定の方法は無いでしょうか 時間なら 下記で事足りるのですが If Format(Time, "hh:nn:ss") < Format("9:00:00", "hh:nn:ss") And Format(Time, "hh:nn:ss") Format("3:00:00", "hh:nn:ss") Then Exit Sub End If

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

こんばんは ブック起動時にA4~H4の値をグローバル変数に格納してCalculateイベント発生時に比較しては如何でしょうか '<<ThisWorkBookモジュール>> Option Explicit Private Sub Workbook_Open() v = Worksheets("Sheet1").Range("A4:H4").Value End Sub '<<標準モジュール>> Option Explicit Public v As Variant '<<シートモジュール>> Private Sub Worksheet_Calculate()   Dim i As Long, flg As Boolean   For i = 1 To 8     If Range("A4:H4").Item(i).Value <> v(1, i) Then       MsgBox Range("A4:H4").Item(i).Address & " に変化がありました。"     End If   Next   If flg = True Then v = Range("A4:H4").Value End Sub

その他の回答 (1)

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.1

> A:4 から h:4  よくわかりませんがA4セルからH4セルの範囲ということ? つまりRange("A4:H4")の範囲で発生したCalculateイベントだけをトリガーにしたい? 通常の方法(該当のシートのCalculateイベント)ではそういう捕らえ方はできないと思います。 ただ、裏ワザというか、抜け道が考えられないわけではありません。 新しいシートを用意します。 仮にトリガーにするRange("A4:H4")があるシートをSheet1だとすると、新しく用意したシートに =Sheet1!A4 =Sheet1!B5 =Sheet1!C4 中略 =Sheet1!G4 =Sheet1!H4 と入力し、それ以外の式は書きません。 その上で、この新しいシートのシートモジュールにCalculateイベントのマクロを書けばいかがでしょうか?

007itochan
質問者

お礼

へそ! やってみます。 基本 Changeで拾うべきなのですが、なぜか WEB配信データでChangeが反応しないのです。(そうしたものらいしです)

関連するQ&A

  • Excelのworksheetどこ間違えてますか?

    Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") Else Target.Offset(0, 1).Value = "" End If End Sub 以前、このサイトで教えてもらったワークシートのプログラムです。 簡単に言えばA列に1から5までの値を入れれば現在時間をB列に 表示し、それ以外の場合は何もいれないと言ったものです。 以前はできたんですが最近また入れるとできなくなっていました。 どこかおかしいとこありますでしょうか??

  • 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」で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

  • Worksheet_SelectionChangeについて

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim GYO As Long ' 8列目のみを対象とする If Target.Column <> 8 Then Exit Sub Else GYO = Target.Row End If ' 8列目が空欄でなければ計算処理を呼び出す(引数は選択行) If Cells(GYO, 8).Value = "" Then Exit Sub Else: Call KEISAN(GYO) End If End Sub という方法で8列目のセルをクリックするとフォームが立ち上がるようにしているのですが、ドラッグによる範囲選択でも8列目が含まれているとフォームが立ち上がってしまいます。 単一セルの選択時のみにするにはどうしたらいいでしょうか。 それとすべてのシートにこのマクロを書いているのですがworkbook全体でやることはできないのでしょうか? Workbookのところにこのコードを入れてもうまくいきませんでした。

  • 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

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、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

  • エクセルでデータ入力された日付と時間を自動入力する

    A1をA2に、B1をB2に、C1をC2に・・・ A1に入力したらA2に更新日付が入るという様に行いたいのですが、 ---------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r.Column = 1 Then r.Offset(0, 1).Value = Format(Now, “yyyy/mm/dd”“ ”“hh:mm:ss”) End If Next r End Sub ---------------- これをどのように改編したらいいのでしょうか?

  • 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 BVでTarget.Offset

    勤務表を作成しています。 勤務「C」の翌日は「休」にするところまでは出来たのですが、「C」が連続する日は「休」も連続させたいのです。例)3日と4日が「C」の時は、5日、6日は連休にしたいのですが、作った下のマクロでは7日も「休」になってしまいます。何が間違ってるんでしょうか?。 If Target.Count > 1 Then Exit Subの意味も良く解っていませんが…。 どなたか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Value = "C" Then Target.Offset(0, 1).Value = ("休") End If If Target.Offset(0, -2).Value = "C" Then Target.Offset(0, 1).Value = ("休") End If End Sub

専門家に質問してみよう