エクセルでセルに文字が入力されたらマクロを実行
- エクセルでセルに文字が入力されたらマクロを実行する方法について質問です。
- マクロを実行しても何も実行されない問題や、メッセージボックスのみが実行されて後のコマンドが実行されずにエラーになる問題が発生しています。
- シートモジュールとワークシート上での条件判定によるマクロの起動方法について詳しく教えてください。
- ベストアンサー
エクセルでセルに文字が入力されたらマクロを実行
前回どなたかが質問されて回答を見せてもらったら私のやりたいことと同じだったので実行してみましたが出来なかったのでもう一度質問をさせてください。 1.実行したのですが、なにも実行されません。 2.実行したらメッセジBOXだけは実行するのですが、後のコマンドが実行されずにエラーになります。 もう一度詳しく教えてください。 マクロ初心者ですよろしくお願いします。 1.【シートモジュールで条件判定し、マクロを起動する】 通常はこちらの方法が使われます。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Target.Address = "$A$1" Then '条件判定:A1セルの値は 1 か? If Target.Value = 1 Then MsgBox "A1セルは条件を満たしました" End If End If End Sub 2.【ワークシート上で条件判定し、マクロを起動する】 処理内容にもよっては不向きな場合もありますが、こんな方法も あります。 マクロを Sub ではなく、Function 、、つまり関数にしてしまいます。 Function TestMacro() '<-- Sub を Function に替える MsgBox "A1セルは条件を満たしました" TestMacro = "" '戻り値はなし End Function そして、ワークシートの B1 セルに次の式を入力します。()は必須 です。 =IF(A1=1,TestMacro(),"")
- saab8743
- お礼率74% (129/173)
- オフィス系ソフト
- 回答数4
- ありがとう数6
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
全てのセルで1が入力されたら実行するには、 > '変化のあったセルがA1セルか? > If Target.Address = "$A$1" Then この部分を改造します。具体的に言うとコメントアウトしてください。もしくは削除する。これに対応するEnd Ifも忘れずに。 親切にコメントで動作を書いてあるのに無駄なようですね残念です。
その他の回答 (3)
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
No.1の補足に対する、回答として Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Target.Address = "$A$1" Then '条件判定:A1セルの値は 1 か? If Target.Value = 1 Then MsgBox "A1セルは条件を満たしました" Range("a2") = "1123" Sheets("Sheet2").Select '/// Range("A1:C24").Select '←ここでエラー【黄色くなって止まる Sheets("Sheet2").Range("A1:C24").Select ' Sheets("Sheet2"). を付け加えました Selection.Copy Sheets("Sheet1").Select '/// Range("B8:D31").Select ' Range("B8:D31"). でも間違えでは無いが、 Range("B8").Select ' 左上のセルを指定 ActiveSheet.Paste End If End If End Sub
お礼
動作しました。 丁寧に教えていただきありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17068)
値を変化したことによる処理の起動は、(上記プログラムでは)A1セルだけに限定されてますが、判っていますか。 そしてA1で1と入力されたときだけメッセージボックスが出るようになってますが、判ってますか。
お礼
この質問では解決しました。 ありがとうございました。
補足
すいません判っていませんでした。 そうするとMsgBox出て終わりなのでしょうか。 A1で1と入力されたときだけメッセージボックスが出るようになってますは判っていますが、では、セルの値が1になったときにA1以外のセルのコピーとかセルからセルへの値の入れ替えなど沢山の処理がマクロに付け加えたりするにはどうすれば出来るのですか、別に書いたマクロを実行したいのですが、現在はAUTO_OPNEで使ってやっているのですがそれだとファイルを再度開かないと実行しないので終了するまでにデータが変わってしまって、出来ればリアルタイムに実行をしたいのですが、お手数をかけますが、よろしくお願いします。
- pbforce
- ベストアンサー率22% (379/1719)
1.実行したいシートのシート名を右クリックしてコードの表示を選びます。出てきたVBEに記述してください。 2.後のコマンドとは何でしょう?エラーはどのようなものが出ますか?
お礼
ありがとうございました。
補足
ありがとうございました。 下のもので実行すると、MsgBoxまでは、OKですが次の段階でとまってしまいます。 何かが違いますか、?今仮にSheet2をSheet1にコピーをするものをつけてみて実行しました。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Target.Address = "$A$1" Then '条件判定:A1セルの値は 1 か? If Target.Value = 1 Then MsgBox "A1セルは条件を満たしました" Range("a2") = "1123" Sheets("Sheet2").Select Range("A1:C24").Select’←ここでエラー【黄色くなって止まる Selection.Copy Sheets("Sheet1").Select Range("B8:D31").Select ActiveSheet.Paste End If End If End Sub プログラムはこのように書けばいいのですか?
関連するQ&A
- EXCELでセルの値が変化したときだけにマクロ実行
教えてください。 EXCELのA1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行したいと思い、以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打ちました。 そうしたところキーボードからA1セルに1や0を打ち込むとMacro1・Macro2を実行するのですが。A1セルに関数式を入れ自動で1→0・0→1に変化してもMacro1・Macro2が実行されません。この場合どう修正すればMacroが実行されるようになりますか? ※ちなみにA1セルの関数式はある条件を満たしたら1、そうでない時0という式です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target.Value = 0 Then Macro1 End If If Target.Address = "$A$1" And Target.Value = 1 Then Macro2 End If End Sub
- ベストアンサー
- オフィス系ソフト
- Excelでセルの値を変化させた時にマクロを実行するには?
"A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then cells(1,2)=5 ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELでセルの変更をしたらマクロを実行
このようなコードを作成しました。 Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Address = "$D$3") Then ★ End If End Sub ★に MsgBox "変更したよ" といれるとちゃんと表示されます。 ですが、 If D9 = "テスト" Then MsgBox "テスト" End if としても何も起こりません。 Call KEISAN のように呼び出すようにしても何も起こりません。 どこがダメなのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelのマクロで質問です
セルに関数で文字が入った時にマクロを実行させる方法を教えて下さい。 今回行いたいのは、C9~C19セルにNGと表示された場合にメッセ―ジを表示したいです。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Intersect(Target, Range("C9:C19")) Is Nothing Then Exit Sub '条件判定:A1セルの値は 1 か? If Target.Value = "NG" Then MsgBox "NGです" End If End Sub このような場合C9~C19セルにNGと打ち込めばメッセ―ジが表示されるのですが あらかじめ、関数で =IF(M9="","",IF(Q9<M9,"OK","NG")) というような式がそれぞれのC9、C10、C11・・・・セルに入ってしまっています。 これだと、例えばC9セルにNGと表示されてもマクロは起動せず、メッセージが表示されません。 関数をマクロに盛り込むか、このままでもマクロが起動できるような書き方があるか 教えてください。 すみません。補足でQ9セルには =IF(I9="","",I9+"07:01")のような関数が 入力されています。
- ベストアンサー
- Excel(エクセル)
- エクセル マクロ 初心者です
エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。
- ベストアンサー
- オフィス系ソフト
- メッセージボックスを表示させるエクセルマクロ
こんにちは。マクロ初心者です。 エクセル(Excel2003)でメッセージボックスを 表示させるマクロが思うようにいかず困っています。 B列に「○○会社」と入力されれば、 「取引先です。」 とメッセージボックスを表示させたいと思い、 次のとおりマクロを作成しました。 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- しかし、コピーなどで複数のセルを貼り付ける(入力)行為をすると、 「実行エラー'13': 型が一致しません」と出てしまいます。 Worksheet_Change(ByVal Target As Range)を使っているので、 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- と、「If Target.Count > 1 Then Exit Sub 」を入れれば、 メッセージは出なくなるのですが、 これだと、A列セルに、コピー&ペーストで複数セルを貼り付けた場合、 「○○会社」があっても、マクロが効いてきません。 複数セルの貼り付けにも対応させるには、 どのようにすればよろしいでしょうか? 基本的なところが理解できていないのだと自覚しておりますが、 どうかご教授願います。 長々とわかりづらい文章ですみません。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ExcelVBA 二つのセルに入力された時の判定
セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub
- ベストアンサー
- その他(プログラミング・開発)
- ExcelVBA コードの実行について
VBA勉強中の者です。早速ですが質問させて頂きます。 sheet1のA2セルをアクティブにした時、メッセージボックスに「ここはA2です」と表示させたく、 sheet1に以下のコードを記述しました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = Range("A2").Address Then MsgBox "ここはA2です" End If End Sub VBEを開いた状態でsheet1のA2を選択したところ上手く動作したのですが、 この状態で▲マークの再生ボタン(sub/ユーザーフォームの実行)を押しても マクロ呼び出し画面が出てしまうだけで実行できません。 何故なのでしょうか? 目的の動作は「ブックを開いた」時からずっと有効にさせていたいのです。 どなたかご助力お願いいたします。
- ベストアンサー
- オフィス系ソフト
- セルから呼び出したプロシージャ内でセルの塗りつぶし
初めて質問させていただきます 宜しくお願い致します セルから呼び出したプロシージャ内からセルの塗りつぶしを 実行しても塗りつぶしが有効になりません たとえば A1のセルに10を入力 B1のセルに=TEST(A1) と入力 マクロのモジュール内に Public Function TEST(tmp_No As Integer) As Integer TEST = tmp_No * 25 '(1)ここから If TEST = 250 Then 'Msgbox "チェック用MSG" Cells(1, 1).Interior.ColorIndex = 38 End If '(2)ここまで End Function というファンクションプロシージャがあるとします 引数で10を持って行ってるので10×25で TESTが250になりB1には計算結果として 250と問題なく表示されています しかし (1)~(2)のセルの塗りつぶしは実行されません 仮にチェック用のメッセージボックスのコメント を外すとキチンとメッセージボックスは 表示されます また、塗りつぶしダケのマクロを作成し Public Sub cell_paint() Cells(1, 1).Interior.ColorIndex = 38 End Sub 実行すると、これも問題なく動作しますので EXCELの設定ではないと判断しています セルから呼び出したプロシージャの時 だけ、動作しないようなのですが なぜでしょうか? 他の方法で回避可能でしょうか? ※実際には塗りつぶしの判定方法が 20個あり、条件付書式では対応出来ないので マクロで処理を試みてます 宜しくお願い致します
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?
VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub
- ベストアンサー
- オフィス系ソフト
お礼
親切に回答いただきありがとうございます。 質問の答えは判りました。動作も確認できました。
補足
うまく説明が出来なくてごめんなさい。 この動作はうまくいきました。A1に1を入力するとうまくいきます。 ありがとうございました。 ただ、手入力でA1に1を入力をして(セルの変化がある)ではよいのですが、プロシージャーでデータが書き換わったときに動作させたいのですが、どうすればいいのでしょうか 何度もすいませんがよければ教えてください。