• 締切済み

イベント(Worksheet_Change(ByVal Target As Range)に詳しい方お願いします。

こんにちわ。 エクセルで経理関係の表を作っているのですが、イベントプロシージャにて、特定の列のセルに入力された数値に対して、許容範囲か否かサインを出して(IF関数)、そのサインがでれば音を出すマクロを組もうとしているのですが、なかなかうまく行きません。   商品           商品  A B C -------- L M N O  | P Q--------AA 1 ○ |     ▲ 2 | 3 | | この表で注意すべき赤字は▲、伸ばすべき黒字は○。 A1~N1が商品種別や単価などの情報です。 ○▲サインはIF関数にて表示出来るようにしたのですが、このサインが表示された時にマクロを実行するイベントとして、 ************************ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 14 Then Application.EnableEvents = False Target.Value = s If s <> "" Then Call サイン発生通知 End If Application.EnableEvents = True End If If Target.Column = 28 Then Application.EnableEvents = False Target.Value = s If s <> "" Then call サイン発生通知 End If Application.EnableEvents = True End If End Sub ************************ としています。 音を出すマクロ自体は単体で(call サイン発生通知で)確認出来ているので、イベントプロシージャの記述に問題があると思うのですが・・・ 記述しているところは、Excelobject Sheet1(この表があるところ)です。 どなたか詳しい方おられましたら、ご教授の程お願い致します。<(_ _)>ペコリ 

みんなの回答

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.2

>Dim i As String >If i = "○" Then 今度は変数iになにもセットせずにIf文判断してますよ。 >A列のみ音がでるのですが、 >AB列(上図訂正)では自分で書き込んでも音が出ません・・・ ???AB列は音が出るけれど、N列では出ないのでは? ステップ実行などでご自分で動作検証できないと 時間が掛かるだけです。

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.1

>Target.Value = s 転記式の右辺と左辺が逆でしょう。

tanaka-saburo
質問者

補足

早速のご教授ありがとうございます。<(_ _)> ご指摘の箇所を修正してみましたが、自分で書き込んだ時、A列のみ音がでるのですが、AB列(上図訂正)では自分で書き込んでも音が出ません・・・ あと、サイン別に分けた方が後々役に立つので修正してみましたが、出来てない物は何しても出来ませんね・・・(^^; 現在↓こうしていますが・・・(わがままばかり言ってスイマセン・・・) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 14 Then Application.EnableEvents = False Dim i As String If i = "○" Then Call サイン発生通知 ElseIf i = "▲" Then Call サイン発生通知2 End If Application.EnableEvents = True End If If Target.Column = 28 Then Application.EnableEvents = False Dim s As String s = Target.Value If s = "○" Then Call サイン発生通知1 ElseIf s = "▲" Then Call サイン発生通知2 End If Application.EnableEvents = True End If End Sub

関連するQ&A

  • VBA CHANGEイベントに複数イベントを

    いつもお世話になっています。 色々しらべて試してみたんですが、うまくいかないんで教えてください。 CHANGEイベントに複数のイベントを書き込みたいんですが。 今現在、問題なく動いている以下のイベントがあります。 (1) Private Sub Worksheet_Change(ByVal Target As Range) Dim rang3 As Range Dim rang4 As Range Dim ■■ As String Dim LastRow1 As Long LastRow1 = Worksheets("○○").Cells(Rows.Count, "b").End(xlUp).Row Set rang4 = Worksheets("○○").Range("b:I" & LastRow) Set rang3 = Range("h4") If Intersect(Target, rang3) Is Nothing Then Exit Sub On Error Resume Next ■■ = WorksheetFunction.VLookup(Target.Value, rang4, 2, 0) If Err.Number > 0 Then MsgBox Target.Value & "はありません。基本情報台帳に入力してください。" Range("h4").Select Else Application.EnableEvents = False Range("I4").Value = Application.WorksheetFunction.VLookup(Target, Worksheets("△△").Range("b:I"), 2, False) Range("j4").Value = Application.WorksheetFunction.VLookup(Target, Worksheets("△△").Range("b:I"), 3, False) Range("k4").Value = Application.WorksheetFunction.VLookup(Target, Worksheets("△△").Range("b:I"), 7, False) Range("l4").Value = Application.WorksheetFunction.VLookup(Target, Worksheets("△△").Range("b:I"), 8, False) Range("m4").Value = Application.WorksheetFunction.VLookup(Target, Worksheets("△△").Range("b:I"), 5, False) Application.EnableEvents = True Range("K4").Select End If End Sub このシートにもう一つ、イベントを入れたいのですが。 (2) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("E4")) Is Nothing Then Exit Sub Else If Range("e4").Value = "1" Then Target.Offset(0, 19).Value = "☆" End If どこに入れればいいのかわかりません。 (3) また、(2)のイベントの他に、 (1)のVLOOLUPが実行され、尚且つ(2)のイベントのE4が値が1だった場合、Y4にH4の値を入れたいのですが・・・。 (2)のみなら動くことは確認できましたが、(1)のexit sub の直前に入れたり、end ifの前に入れたりしましたが、片方は動くが、もうひとつが動かないです。 (3)については、まったくわかりません。 マクロについて、自分でネットで勉強した程度なので、基本がわかっていないからなのでしょうが・・・。 どなたか、教えてください。 お願いします。

  • VBA Changeイベントのエラー

    エクセルで簡単な計算書を作成しています。(マクロ初心者) ちなみにこのコードは自分で作成したものではなく、人から聞いていじってみました。 Private Sub Worksheet_Change(ByVal Target As Range) '一度に複数セルの値が変更された場合は終了 '(A5:C5を選択しDeleteも含みます。) If Target.Count > 1 Then Exit Sub If Intersect(Target, Me.Range("H170:K170", "H171:K171","C76")) Is Nothing Then Exit Sub Application.EnableEvents = False '数値かつ空白以外の場合 If IsNumeric(Target.Value) And Target.Value <> "" Then Me.Range("M170").Formula = "=if(iserror(H170*I170*J170*K170),""-"",H170*I170*J170*K170)" '空白の場合 ElseIf Target.Value = "" Then Me.Range("H170:K170,M170").Value = "-" End If Application.EnableEvents = True Application.EnableEvents = False '数値かつ空白以外の場合 If IsNumeric(Target.Value) And Target.Value <> "" Then Me.Range("M171").Formula = "=if(iserror(H171*I171*J171*K171),""-"",H171*I171*J171*K171)" '空白の場合 ElseIf Target.Value = "" Then Me.Range("H171:K171,M171").Value = "-" End If Application.EnableEvents = True Application.EnableEvents = False '空白の場合 If Target.Value = "" Then Me.Range("D76:K76","C76").Value = "-" End If Application.EnableEvents = True End Sub H170、I170、J170、K170のどれかに数値の入力があった場合、M170に計算式を入力。 H170、I170、J170、K170のどれかの値をDELETEキーでクリアした場合、H170、I170、J170、K170、M170に"-"を入力。 その他に似たような処理がたくさん出てくるので、H171の処理とC76をDELETEキーでクリアした場合の処理を自分で考えて作ってみたのですが、うまく実行されません。H171~の処理はうまくいったので単純にコードをどんどん追加していけば動くと思ったんですが、いろいろ調べてもどうも方法がわからず進みません・・・ 解決してもらえるでしょうか・・

  • 標準モジュールで 『Sub test(ByVal Target As Range)』は動かない?

    選択されている複数のアドレスが知りたいので 標準モジュールに Sub test(ByVal Target As Range) Debug.Print Target.Address End Sub と書きました。 しかしF5ボタンを押しても何も起こりません。 デバッグ→コンパイルをしてもエラーになりません。 シートのイベントプロシージャーではなく 標準モジュールにした理由は イベント発生時ではなく、任意で起動させたいためです。 ためしに、 Sub test(ByVal Target As Range) Debug.Print Target.Address End Sub の下に、 Sub test2() Call test End Sub と書いたら、 「引数は省略できません。」 というエラーになりました。 何がダメなのかわかりません。 ご教授よろしくお願い致します。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 エクセルのセル に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのですがセルをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセル: Changeイベントが発生しないのはなぜ?

    エクセルでChangeイベントが発生しないので以下の方法で確認してみました。 やはり駄目でした。 なぜでしょうか。 条件:Excel2000 セル"A1" に楽天証券から株価データをRSSでもらっています。 書いたコード Private Sub Worksheet(ByVal Target As Range) If Target.Address <> "" Then MsgBox "イベント確認" End if End Sub これで駄目なのでセルにをいじるとイベントは発生しているようです。 Intersectプロシージャも試しましたが駄目でした。 Case文で拾うことも試しましたが駄目でした。 RSSで信号を受けた場合イベントは発生しないものでしょうか? よろしくお願いいたします。

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • Worksheet_changeイベント

    Worksheet_Changeのイベントに下記のような処理を書きました。 内容はI8~I1000までの間のセルで、入力された、変更された場合に、ある処 理(例ではメッセージにしています)をするということをしたいのですが、セ ルの値を変えても全くうごきません。 どこか記述がおかしいでしょうか。 よろしくお願いします。 '◆◆C列にデータ入力(変更された)ときの処理◆◆ If Not Application.Intersect(Target, Range("c8:c1000")) Is Nothing The n MsgBox "変わりました" Else Exit Sub End If

  • Range型とチェンジイベント

    特定のセルに値を入力されると、対象セルの横のセルに数式を代入するエクセルを組んでいます。 セルの内容がクリアされた場合は数式もクリアする形で考えているのですが、 ドラッグしてまとめてクリアすると[型が一致していない]というようなエラーが出てしまいます。 入力されたセルの監視はRange型の変数を用い、ターゲットセルが範囲内にいるかどうかで分岐させています。 対処法をご存知であれば、ご指導よろしくお願いします。 以下にソースを抜粋いたします。 ---------------------------- Set Name_R = _ Worksheets("main").Range(Cells(6, 3), Cells(Point, 3)) Set NT_R = Intersect(Target.Cells, Name_R) If NT_R Is Nothing Then ' Application.EnableEvents = True GoTo Name_END Else If Target.Cells.Value = "" Then Target.Cells.Offset(0, 2).FormulaR1C1 = "" Target.Cells.Offset(0, 3).FormulaR1C1 = "" Target.Cells.Offset(0, 11).FormulaR1C1 = "" ' Application.EnableEvents = True Else Target.Cells.Offset(0, 2).FormulaR1C1 = Range("Z6").FormulaR1C1 Target.Cells.Offset(0, 3).FormulaR1C1 = Range("AA6").FormulaR1C1 Target.Cells.Offset(0, 11).FormulaR1C1 = Range("AB6").FormulaR1C1 ' Application.EnableEvents = True End If End If Name_END: ----------------------------

  • Worksheet_changeイベントが動作しない

    Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$D$224" If Target.Value = "" Then Range("D224").Value = "-" End If End Select End Sub DeleteキーでD224をクリアした場合、D224に"-"が入力されません。 D224はD225と結合してあります。 select~caseを使ってdeleteキーで"-"が入力されるような動作を教えてください・・よろしくおねがいします。。。

  • Excel VBA でイベント"Worksheet_Change"を使

    Excel VBA でイベント"Worksheet_Change"を使って,データの追加処理中に,イベントが連続発生してしまい,エラー発生となります。解決方法のヒントがありませんか? 1)イベント発生を一時的に受け付けない構文の "Application.EnableEvents = False" を処理ルーチンの先頭に入れています。 2)データテーブル表の特定処理「データを追加のため,"セル挿入"→"データ投入"」を行うとイベントの連続発生があるので,"セル挿入"と"データ投入"との間に "Application.Wait (Now() + TimeValue("00:00:01"))" を入れて,タイミングを遅らせていますが効果ありません。

専門家に質問してみよう