質問です。
以下のマクロを作成しましたが全く動作いたしません。
Application.EnableEvents = False
Application.EnableEvents = Trueの場所が悪いのか
いろいろ調べ、いろいろ実験しましたがうまく行きません。
おしえてくれませんでしょうか
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Application.EnableEvents = False
If Target.Column = 8 And Target.Row >= 4 Then
If Target.Row Mod 2 = 0 Then
If IsDate(Target.Text) Then
Cells(Target.Row, 12).Value = Cells(Target.Row, 8).Value + 6
Else
Cells(Target.Row, 12).ClearContents
End If
End If
ElseIf Target.Column = 4 And Target.Row >= 4 Then
If Target.Value = 123 Then
i = Range("A2").End(xlToRight).Column
Range(Cells(Target.Row, 1), Cells(Target.Row, i)).Borders.LineStyle = xlContinuous
End If
End If
ElseIf Target.Column = 8 And Target.Row >= 4 Then
If Target.Row Mod 2 = 1 Then
If IsDate(Target.Text) Then
Cells(Target.Row, 12).Value = Cells(Target.Row, 8).Value + 6
Else
Cells(Target.Row, 12).ClearContents
End If
End If
End If
Application.EnableEvents = True
End Sub
No.1ベストアンサー
- 回答日時:
まず、最初に、こうしたイベント(ドリブン=起動)型マクロの調べ方を教えておきます。
(もしご存知でしたら、ここの部分は読み飛ばしてください。)
VBEditor の左枠の部分をワンクリックすると、●(ブレークポイント)が付きます。
●| Private Sub Worksheet_Change(ByVal Target As Range)
そこで、ワークシートで、該当するセルに入力したりすると、マクロが起動し、●の部分で止まりますので、
F8を押しながら、ステップインでひとつずつ進めていきます。
さて本題です。今回の場合は、
Application.EnableEvents = False
'ワークシートの値をマクロで変える行に対して挟む'
Application.EnableEvents = True
なので、
------------------------
Application.EnableEvents = False
If IsDate(Target.Text) Then
Cells(Target.Row, 12).Value = Cells(Target.Row, 8).Value + 6
Else
Cells(Target.Row, 12).ClearContents
End If
Application.EnableEvents = True
------------------
この部分が最も適していると考えます。
今回のご質問のように、広い範囲を設けても、途中でマクロは抜けてしまいますので、False はTrue には戻りません。
Application.EnableEvents = False
の後に、
Application.EnableEvents = True に戻していないと、次からは、イベント・ドリブンが働きません。
働かなくなると、イミディエイトウィンドウで、
Application.EnableEvents = True
とプロパティを戻してやらなくてはいけません。Excelを再起動しても戻ります。
最近は、掲示板の回答者でも、Application.EnableEvents 自体を入れない風潮のようなものがありますが、それは、Excelのバージョンにもよるのですが、再帰(マクロの最中に、再び、同じマクロを呼び出す)が、古いExcelですと、何万回と呼び出すこともあるので、セルの値の変更に起動するイベントは、是非、Application.EnableEvents を忘れないでください。
No.2
- 回答日時:
こんばんは!
コードを拝見すると最初の方に
>If Target.Column = 8 And Target.Row >= 4 Then
>If Target.Row Mod 2 = 0 Then
とあり、後半にも
>ElseIf Target.Column = 8 And Target.Row >= 4 Then
>If Target.Row Mod 2 = 1 Then
と同じ処理のコードが重複してますよね?
行番号が奇数、偶数関係なしに同じ処理をすることになると思います。
結局、下のような感じのコトがしたいのでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastCol As Long
If Intersect(Target, Range("D:D,H:H")) Is Nothing Or Target.Count > 1 Then Exit Sub
lastCol = Range("A2").End(xlToRight).Column
With Target
If .Row >= 4 Then
If .Column = 8 Then
If IsDate(.Value) Then
Cells(.Row, "L") = .Value + 6
Else
Cells(.Row, "L").ClearContents
End If
Else
If .Value = 123 Then
Range(Cells(.Row, "A"), Cells(.Row, lastCol)).Borders.LineStyle = xlContinuous
End If
End If
End If
End With
End Sub
※ このまま投稿しても字下げができないので
こちらのVBE画面の画像を投稿しておきます。
「If」がどの「End If」までかかっているかが判ると思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
targetをA列のセルに限定するには?
Visual Basic(VBA)
-
-
4
Worksheet_Changeが動かない
その他(Microsoft Office)
-
5
Excel2010 イベントプロシージャが動かない
Excel(エクセル)
-
6
エクセルVBA シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。 例えば、B列に
Visual Basic(VBA)
-
7
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
8
Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる
Visual Basic(VBA)
-
9
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
10
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
11
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
-
12
複数処理 Worksheet_Change(ByVal Target As Range)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
ExcelのVBA。public変数の値が...
-
Excel マクロ VBA プロシー...
-
エクセルに張り付けた写真のフ...
-
Excelのマクロボタンをダブルク...
-
エクセルで別のセルにあるふり...
-
TERA TERMを隠す方法
-
#defineの定数を文字列として読...
-
特定文字のある行の前に空白行...
-
VBA アドインについて お詳しい...
-
別シートに順番で貼り付け
-
マクロ実行時、ユーザーフォー...
-
ソース内の行末に\\
-
ピボットテーブルでの毎回可変...
-
Excel マクロでShearePoint先の...
-
エクセルマクロでワードの一ペ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
エクセルに張り付けた写真のフ...
-
EXCELのVBAでRange("A1:C4")を...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
-
マクロ実行時、ユーザーフォー...
-
特定文字のある行の前に空白行...
-
エクセルVBA
-
マクロの記録を使用したマクロ...
-
wordを起動した際に特定のペー...
-
ダブルクリックで貼り付けた画...
おすすめ情報