
質問です。
以下のマクロを作成しましたが全く動作いたしません。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
-
4
エクセルVBA intersect columnsの複数列のやり方
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
7
エクセルVBA シートモジュールにチェンジイベントを複数設定する方法を教えて下さい。 例えば、B列に
Visual Basic(VBA)
-
8
エクセルマクロPrivate Subを複数にする方法
Excel(エクセル)
-
9
Private Sub Worksheet_Change が複数
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Libre office マクロ
-
マクロを組んで作業するのは実...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
マクロを使って結合セルに丸を...
-
IF関数を使ってマクロを実行さ...
-
エクセルで縦に並んだデータを...
-
最小化したoutlook元に戻すマクロ
-
エクセルのマクロでワードの任...
-
ExcelのVBA。public変数の値が...
-
EXCELのVBAマクロでパソコンを...
-
非表示の列をすべて削除するマクロ
-
既存のマクロをコンボボックス...
-
VBSからのエクセル操作での初期...
-
ASP.NETからEXCEL起動
-
エクセルでA1セルに時刻をリア...
-
エクセルVBAでエラー、Changeの...
-
Wordのマクロでクリップボード...
-
VB初心者です。メールから添付...
-
Sub ***( ) と Private Sub ***...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excelのセル値に基づいて図形の...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
Excel_マクロ_現在開いているシ...
-
ExcelVBAでPDFを閉じるソース
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
エクセルで縦に並んだデータを...
-
TERA TERMを隠す方法
-
特定文字のある行の前に空白行...
-
Excel マクロでShearePoint先の...
-
UWLSの記録でマクロを作成し使...
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
ソース内の行末に\\
-
wordを起動した際に特定のペー...
おすすめ情報