
下記のコードは以前、マクロを繰り返し実行される不具合を解決するために、教えて頂いたコードですが、やはり指定セル値指定文字が表示されるとマクロ「省エネ方法」が繰り返し実行されます。
例えば「省エネ方法」が実行されて「1」を入力し、(OK)をクリックするともう一度、同じマクロが実行されてしまいます。(キャンセル)をクリックすると次のコードが実行されますが、次のコードで違うマクロを実行すると、またまた「省エネ方法」が実行されます。
マクロ「省エネ方法」を繰り返し実行しない方法を教えてください。
現状のコード
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$A$5,$A$13").Text) Is Nothing Then
If Range("$A$5").Text = "新築" And Range("$A$13").Text = "手続き必要" Then
Call 省エネ方法
End If
End If
End Sub
ちなみに
If Not Intersect(Target, Range("$A$5").Text) Is Nothing Or _
Not Intersect(Target, Range("$A$13").Text) Is Nothing Then
If Range("$A$5").Text = "新築" And Range("$A$13").Text = "手続き必要" Then
Call 省エネ方法
End If
End If
このコードに変更しても同様です。
よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
#4です
なんか・・・いっぱい書かれていてちんぷんかんぷんです
>If Not Intersect(Target, Range("$A$5,$A$13").Text) Is Nothing Then
これって実行できるの?
Rangeオブジェクトでないといけなくない?
他のプロシージャをどうのと言われてもその内容が分からない・・・・
>例えば「省エネ方法」が実行されて「1」を入力し、(OK)をクリックするともう一度、同じマクロが実行されてしまいます。(キャンセル)をクリックすると次のコードが実行されますが、次のコードで違うマクロを実行すると、またまた「省エネ方法」が実行されます。
マクロ「省エネ方法」を繰り返し実行しない方法を教えてください。
省エネ方法プロシージャの処理内容を書かないとわからない・・・
先の回答はこのような意味です
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$A$5,$A$13")) Is Nothing Then
If Range("$A$5").Text = "新築" And Range("$A$13").Text = "手続き必要" Then
If Worksheets("新築").Range("BB1") = "" Then
Application.EnableEvents = False
Call 省エネ方法
Worksheets("新築").Range("BB1") = 1 '仮BB1セル
Application.EnableEvents = True
End If
End If
End If
If Not Intersect(Target, Range("$A$15")) Is Nothing Then
MsgBox "A15 Change"
End If
End Sub
Sub 省エネ方法()
MsgBox "省エネ方法"
Range("$A$15") = 1
End Sub
Sub reset_trigger() 'リセット 省エネ方法を実行する
Worksheets("新築").Range("BB1") = ""
End Sub
対象シートは "新築"
回答ありがとうございます。
私もなんだかわけがわからなくなってきました。
貴社の回答を元に設定してみます。
補足が出来ない為、ベストアンサーとさせて頂きます。
もし、何かありましたら
質問をさせて頂きます。
No.7
- 回答日時:
No3です。
>他のマクロを実行された場合に再度、
>「省エネ方法」が実行されます。
>解決方法をお願いできますか。
回答文をよくお読みください。
回答にあるように試してもいないし、内容を理解もしていないということでしょうか??
No3で示しているのは、
『targetSubを1度だけ実行するようにする』
方法です。
これを、質問者様の状況に合わせるようにすれば良いだけの話です。
当方には全体像がわかりませんので、何をどうするのかについては具体的にはわかりかねます。
(質問者様にしかわからない条件や情報が山ほどありますので・・)
>Sub targetSub()
>Const module = "Module56" ' ←モジュール名
>Const subName = "省エネ方法" ' ←プロシージャ名
>'1回だけ実行する処理内容を記述
>MsgBox "targetSubを実行しています"
>'1回だけにするための処理
としているようですが、それで一体いつtargetSubが実行されているのでしょうか?
更には、モジュール名が合致していない可能性がありそうに思われます。
No3の回答の内容は、停止したいプロシージャ内に「自分自身を2度目からは実行しないようにする処置」を記述しておくという意味なのですけれど・・・
No.5
- 回答日時:
マクロ「省エネ方法」の繰り返し実行がなくなった一方で、その後のマクロが実行されなくなってしまったとのこと、ご迷惑をおかけしております。
この状況は、以前お伝えしたコードで Application.EnableEvents = False に設定した後、何らかの原因で Application.EnableEvents = True に戻らず、イベント処理が無効化されたままになっている可能性が非常に高いです。
考えられる原因と、その解決策を順にご説明します。
考えられる原因と解決策
マクロ「省エネ方法」内でエラーが発生し、Application.EnableEvents = True が実行されなかった
これは前回もお伝えしましたが、最も可能性の高い原因です。マクロ「省エネ方法」の処理中にエラーが発生すると、エラー処理が適切に行われていない場合、Application.EnableEvents = True の行まで処理が進まずにマクロが終了してしまうことがあります。
解決策:
マクロ「省エネ方法」にエラー処理を追加する: 以下の例のように、On Error GoTo ステートメントを使ってエラーハンドリングを追加し、エラー発生時にも Application.EnableEvents = True が実行されるように修正してください。
Sub 省エネ方法()
On Error GoTo ErrorHandler
' ここに「省エネ方法」の処理を記述
ExitSub
ErrorHandler:
Application.EnableEvents = True ' エラー発生時にもイベントを有効に戻す
MsgBox "マクロ「省エネ方法」でエラーが発生しました: " & Err.Description, vbCritical
End Sub
content_copy
download
Use code with caution.
Vba
マクロ「省エネ方法」が途中で予期せず終了してしまった
何らかの原因でマクロ「省エネ方法」が処理の途中で停止してしまい、Application.EnableEvents = True の行に到達しないまま終了している可能性も考えられます。
解決策:
マクロ「省エネ方法」をステップ実行で確認する: VBE(Visual Basic Editor)を開き、マクロ「省エネ方法」のコードにブレークポイントを設定し、F8キーを押しながら一行ずつ実行していくことで、どこで処理が止まっているかを確認します。
不要な処理がないか確認する: マクロ「省エネ方法」のコードを見直し、無限ループに陥るような処理や、予期せずマクロを終了させてしまうような処理がないか確認してください。
他のマクロが Application.EnableEvents = False のまま終了している
可能性は低いですが、他のマクロが Application.EnableEvents を False に設定した後、True に戻さずに終了してしまっている場合も考えられます。
解決策:
他のマクロのコードを確認する: 他のマクロのコードをチェックし、Application.EnableEvents を操作している箇所がないか確認し、もしあれば適切に True に戻しているか確認してください。
一時的な復旧方法
もし現在、イベント処理が無効化されたままになっている場合は、VBE(Visual Basic Editor)のイミディエイトウィンドウに以下のコードを入力し、Enterキーを押すことで、強制的にイベント処理を有効に戻すことができます。
Application.EnableEvents = True
content_copy
download
Use code with caution.
ただし、これはあくまで一時的な対処であり、根本的な原因を特定し、上記のような解決策を実施する必要があります。
確認していただきたいこと
問題を特定するために、以下の情報を教えていただけますでしょうか?
マクロ「省エネ方法」の具体的なコード: エラー処理を追加する上で、具体的なコードを確認させていただけると助かります。
その後実行されないマクロのコード: どのマクロが実行されなくなっているのか、そのコードを教えてください。
エラーが発生しているかどうかの確認: マクロ「省エネ方法」実行中にエラーメッセージが表示されたり、途中で処理が止まったりするような現象はありますか?
イミディエイトウィンドウでの確認: VBEのイミディエイトウィンドウに ?Application.EnableEvents と入力してEnterキーを押すと、何と表示されますか?
これらの情報に基づいて、より具体的なアドバイスをさせていただきます。
お手数をおかけしますが、よろしくお願いいたします。
No.4
- 回答日時:
こんにちは
エクセル小僧様のご質問は何々したいの条件が不十分だと思いますよ
>繰り返し実行しない
という事は、逆にこの場合のみ実行したいという事になると思うのですが如何ですか
その場合の条件は何?繰り返し処理したい場合もあるかも知れませんし
よく考えて・・・
少なくとも
If Not Intersect(Target, Range("$A$5,$A$13").Text) Is Nothing Then
If Range("$A$5").Text = "新築" And Range("$A$13").Text = "手続き必要" Then
だけでは不十分という事ですよね
実行条件を絞る方法はたくさんあるけれど
例えば、どこかの使わないセルにトリガーキーを書き込むとか
Static変数を使うとか・・・
ブックのOpenやBeforeCloseでトリガーキーを設定したり
セルA5を変更したら実行するようにするとか・・・
SheetBeforeDoubleClickなどに隠すとか・・・(トリガーキー:条件値)
どこかの使わないセルはVBAで対象シートにUsedRangeを使っていないシートで適当に指定してね
書き込みとIf文で出来ると思うのでやって見てください
No.3
- 回答日時:
No2です。
>コードに関しては私が質問をして、作成しております
おや、そうなのですか。
毎度「コードをよこせ」の連呼しかなさらないし、(この質問のように)同じことを何度でも繰り返して質問しているので、てっきり魔法の呪文としか思っていない方なのかと思っていました。
方法はいろいろありますが、実態が不明なので、以下は前回の後半に書いた方法のうちの一つの例です。
内容としては、mainから呼び出しているtargetSubを一度だけ実行できるようにするという一例です。
1)以下のコードを標準モジュールにコピペします。
2)Const定義の「モジュール名」をコピペしたモジュール名に修正します
(↑これを正しくやらないと、エラーになります)
以上でセッティングは完了です。
「Sub main」を何度か実行してみてください。
(どこが実行されているかは、メッセージ表示されるようにしてあります)
最初の1度目にしか「targetSubを実行しています」の表示がされないと思います。
このことは「targetSub」が1度実行された後は、次に呼び出されても実行されないということを意味しています。
'------- ここから -------
Sub main()
MsgBox "mainからtargetSubを呼び出します"
Call targetSub
End Sub
Sub targetSub()
Const module = "Module1" ' ←モジュール名
Const subName = "targetSub" ' ←プロシージャ名
'1回だけ実行する処理内容を記述
MsgBox "targetSubを実行しています"
'1回だけにするための処理
With ThisWorkbook.VBProject.VBComponents(module).CodeModule
.InsertLines .ProcBodyLine(subName, 0) + 1, "Exit sub"
End With
ThisWorkbook.Save
End Sub
'------- ここまで -------
No.2
- 回答日時:
こんにちは
以前にも、同じことについて回答した気がしますね。
いつも無視されているので、これも無視なんでしょうけれど・・・
https://oshiete.goo.ne.jp/qa/13979898.html
※ 意味がわからない場合は、コードを作成した方に見せれば、理解してもらえるでしょうし、対応コードも作成してくれるでしょう。
No.1
- 回答日時:
原因は、マクロ「省エネ方法」内で A5セルまたは A13セルの値を変更している可能性が高いです。
例えば、「省エネ方法」の中で InputBox を使用して値を入力し、その値を A5セルや A13セルに書き込んでいる場合、Worksheet_Change イベントが再度トリガーされてしまうのです。繰り返し実行を防ぐためには、マクロ「省エネ方法」の実行中に Worksheet_Change イベントがトリガーされないようにする必要があります。そのためには、イベントを一時的に無効化する方法が有効です。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2024/12/05 16:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2024/12/04 13:24
- Visual Basic(VBA) VBAコードについて教えてください。 3 2024/07/02 12:34
- Visual Basic(VBA) エクセルのVBAコードについて教えてください。 1 2024/07/03 17:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2024/03/01 17:04
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2024/05/14 14:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2024/07/02 08:51
- Visual Basic(VBA) エクセルのVBAコードについて教えてください。 6 2024/06/28 11:33
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2024/03/06 13:07
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
コーピングについて教えてください
皆さんはストレスを感じたとき、どのような方法や手段、テクニックで対処していますか?
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
VBA Application.Matchについての質問です
Visual Basic(VBA)
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
-
4
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
5
VBA 入力箇所指定方法
Visual Basic(VBA)
-
6
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
7
VBAのループ処理について教えてください
Visual Basic(VBA)
-
8
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
9
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
10
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
11
エクセルVBAコードで教えて下さい!
Visual Basic(VBA)
-
12
vba アクティブシートの名前変更について教えてください
Visual Basic(VBA)
-
13
Excel 範囲指定スクショについて Excelで範囲指定してスクリーンショットする機能がありますが
Visual Basic(VBA)
-
14
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
15
[Excel VBA]特定の条件で文字を削除&残す処理をするファイルを作成したいです
Visual Basic(VBA)
-
16
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
17
VBA 2次元配列の出力
Visual Basic(VBA)
-
18
セル内が空白設定なのに#N/Aと出てくるのを回避する方法を教えてください。
Excel(エクセル)
-
19
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
20
Visualbasicの現状について教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの「To」という語句について
-
エクセルのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでFOR NEXT分を Application...
-
算術演算子「¥」の意味について
-
[VB.net] ボタン(Flat)のEnable...
-
VBAでユーザーフォームを指定回...
-
VBAから書き込んだ条件付き初期...
-
Excel VBAについて。こんな動作...
-
マクロVBAです。 どなたかコー...
-
質問58753 このコードでうまく...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
Excel マクロについて詳しい方...
-
以下のプログラムの実行結果は...
-
VBA Application.Matchについて...
-
2つのマクロでチェックボックス...
-
VBAについてです。 どなたかご...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.net 文字列から日付型へ変更...
-
VBA 最終行の取得がうまくいか...
-
VBAでエクセルのテキストデータ...
-
【ExcelVBA】5万行以上のデー...
-
VBAについてです。 データのチ...
-
エクセルVBAで在庫の組み換え処...
-
VBAから書き込んだ条件付き初期...
-
エクセルのVBAコードについて教...
-
VBAでユーザーフォームを指定回...
-
エクセルのVBAについて教えてく...
-
vbaマクロについて
-
ExcelのVBAコードについて教え...
-
【VBA】 結合セルに複数画像と...
-
WindowsのOutlook を VBA から...
-
質問58753 このコードでうまく...
-
ExcelのVBAコードについて教え...
-
Excel VBAについて。こんな動作...
-
[Excel VBA]特定の条件で文字を...
-
[VB.net] ボタン(Flat)のEnable...
-
ExcelからVisual Basicを開くと...
おすすめ情報
回答ありがとうございます。
無視をしていたわけではないのですが、
申し訳ありません、
コードに関しては私が質問をして、作成しておりますので、対応コードが分かりません。
教えて頂く事は可能でしょうか。
勝手なお願いですが、よろしくお願いいたします。
回答ありがとうございました。
教えて頂いた通りに
Sub main()
MsgBox "mainからtargetSubを呼び出します"
Call 省エネ方法
End Sub
Sub targetSub()
Const module = "Module56" ' ←モジュール名
Const subName = "省エネ方法" ' ←プロシージャ名
'1回だけ実行する処理内容を記述
MsgBox "targetSubを実行しています"
'1回だけにするための処理
を設定しましたが、他のマクロを実行された場合に再度、
「省エネ方法」が実行されます。
解決方法をお願いできますか。
回答ありがとうございました。
教えて頂いたコードを設定しましたが、マクロ「省エネ方法」の繰り返しは無くなりましたが、
その後のマクロが実行されなくなってしましました。
解決方法を教えてください。
例えば、同じシートに
If Not Intersect(Target, Range("$K$5").Text) Is Nothing Then
If Range("$K$5").Text = "手続き必要" Then
Call 矢印9表示
Call 省エネ提出方法メモ表示
End If
End If
を設定すると繰り返しが無くなりますが、
どうしてか
If Not Intersect(Target, Range("$A$13")) Is Nothing Then
If Range("$A$13").Value = "手続き必要" Then
Call 省エネ方法
End If
End If
と設定するとマクロ「省エネ方法」が実行されないため、
「.Text」を変更したのですが、このコードを設定すると、繰り返しになってしまします。
A13には「=K5」の数式が設定されており、
Sub 手続き必要()
Sheets("新築").Select
Range("A13").Select
ActiveCell.FormulaR1C1 = "手続き必要"
End Sub
でA13に「手続き必要」と文字が入力できるようにした場合は
全然関係の無いマクロが実行されて、キャンセルをクリックすると
無限ループになります。
If Not Intersect(Target, Range("$A$13")) Is Nothing Then
If Range("$A$13").Value = "手続き必要" Then
Call 省エネ方法
End If
End If
を改良して上手くできないでしょうか?
よろしくお願いいたします。
回答ありがとうございます。
№1の方にも補足させていただきましたが、
コードの「.Value」ではマクロが無限ループとなり
「.Text」を設定するとマクロが繰り返し実行されます。
A13に「手続き必要」と表示されるのはA13に「=K5」の数式
K5には「=AL10」AL10には「=$AL$2&""&$AL$3&""&$AL$4&""&$AL$5&""&$AL$6&""&$AL$7&""&$AL$8&""&$AL$9」の数式が設定されておりますが、
マクロ「Sub 手続き必要()
Sheets("新築").Select
Range("A13").Select
ActiveCell.FormulaR1C1 = "手続き必要"
End Sub
を設定しても上手く行きませんでした。
解決方法があれば教えてください。
回答ありがとうございます。
大変申し訳ありません。
補足が後3回しかできず、このままでのやり取りでは、解決迄、行かない可能性がありますので、一旦、貴者をベストアンサーとさせて頂きまして、
新しく質問をさせて頂けますか?