- ベストアンサー
エクセルの特定のセルの値が変化したらマクロを自動実行させたい。
- エクセルの特定のセルの値が変化したら、マクロを自動実行させる方法について教えてください。
- エクセルのシート1のB5に英数字を入力すると、シート2のA列を検索し、同じ値がある場合はその行のB列にある値をH6に表示します。
- シート2のA列に値がない場合は、「データがありません」とメッセージボックスで表示します。また、シート3のA1に数字を入力し、マクロを実行すると連番が生成され、シート1のH7に表示されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
NO1です。 B5セルクリア毎に起動されるので、次の様に割り込み停止と開始を設定すれば動作すると思います。 Application.EnableEvents = False Range("B5").Select Selection.ClearContents '消去 Range("B5").Select Application.EnableEvents = True
その他の回答 (1)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Union(Range("B5"), Range("H6"))) Is Nothing Then Exit Sub ~印刷~ End Sub
補足
今はフォームで作成したボタン(印刷ボタン)をおすと 以下のマクロが動きます。 B5又はH6のセルの値が変化したら 以下のマクロを自動で動かしたいのですが 可能でしょうか? 'Sheet3から印刷すべき連番を獲得します。 Worksheets("Sheet3").Select Range("A1").Select 番号 = ActiveCell 連番 = "A" & Application.WorksheetFunction.Rept("0", 5 - Len(番号)) & 番号 'Sheet3の番号セル「B1」を更新します 番号 = 番号 + 1 ActiveCell.FormulaR1C1 = 番号 'Sheet1のセル「H7」欄に連番を表示します。 Worksheets("シート3").Select Range("B1").Select ActiveCell.FormulaR1C1 = 連番 Worksheets("シート1").Select Range("H6").Select '調べたいセルを記入 If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! エラー" Case CVErr(xlErrNA) If vbOK = MsgBox(" データがありません") Then Exit Sub End Select End If Sheets("シート1").PrintOut Copies:=1 Range("B5").Select Selection.ClearContents '消去 Range("B5").Select End Sub
お礼
私の能力不足で、うまく動作してくれません。 コンパイルエラー等は無くなりましたが、 対象データが無くメッセージボックスが出て 印刷を止める状態なのですが、 #N/Aが印刷後メッセージボックスが出たりして 思ったとうりに動作しません。 ご丁寧に回答をしていただきましてありがとうございました。