前提・実現したいこと
指定の列(T,V,X)に、入力列(R,S,U,W)に日付を打ち込んだら、10営業日、20営業日、30営業日と日付を計算させるマクロイベントを作成しております。 (例)R列に今日の日付を入力したら、T列は10営業日後の日付、V列は20営業日後の日付、X列は30営業日後の日付が自動で入力される。 R列を削除(空白)にしたら、以降の列も自動的に削除
以下、コード
VBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2 3Dim Yasumi 4Dim i 5Dim j 6Dim k 7Dim Rng As Range 8 9Set Yasumi = ThisWorkbook.Worksheets(2) 10 11'各営業日ごとの日付を計算 12i = Application.WorkDay(Target.Value, 10, Yasumi.Range("A2:A81")) 13j = Application.WorkDay(Target.Value, 20, Yasumi.Range("A2:A81")) 14k = Application.WorkDay(Target.Value, 30, Yasumi.Range("A2:A81")) 15 16Application.EnableEvents = False 17 18For Each Rng In Target 19 20'R列に予定日が入ったら、T列に10営業日後の日付を入れる。 21If IsDate(Rng.Value) = True And Rng.Column = 18 And Rng.Row <> 1 Then 22 Rng.Offset(0, 2).Value = i 23 Rng.Offset(0, 2).NumberFormatLocal = "yyyy/mm/dd" 24'R列の日付が消されたらT列の日付も消す 25 ElseIf Rng.Value = "" And Rng.Column = 18 And Rng.Offset(0, 2) <> "" And Rng.Row <> 1 Then 26 Rng.Offset(0, 2).Value = "" 27 Rng.Offset(0, 4).Value = "" 28 Rng.Offset(0, 6).Value = "" 29End If 30 31'S列に実績日が入ったら、T列に10営業日後の日付を入れる 32If IsDate(Rng.Value) = True And Rng.Column = 19 And Rng.Row <> 1 Then 33 Rng.NumberFormatLocal = "YYYY/MM/DD" 34 Rng.Offset(0, 1).Value = i 35 Rng.Offset(0, 1).NumberFormatLocal = "yyyy/mm/dd" 36'S列の日付が消されたら、T/V/W列の日付も消す(R列の日付は消さない) 37 ElseIf Rng.Value = "" And Rng.Column = 19 And Rng.Offset(0, 1) <> "" And Rng.Row <> 1 Then 38 Rng.Offset(0, 1).Value = "" 39 Rng.Offset(0, 3).Value = "" 40 Rng.Offset(0, 5).Value = "" 41End If 42 43 44'T列に予定が入ったら、V列に20営業日後を入れておく 45If IsDate(Cells(Rng.Row, "T")) = True And Rng.Row <> 1 Then 46 Cells(Rng.Row, "V").Value = j 47 Cells(Rng.Row, "V").NumberFormatLocal = "yyyy/mm/dd" 48'T列の日付が消されたら、V/W列の日付も消す 49 ElseIf Rng.Value = "" And Rng.Column = 20 And Rng.Row <> 1 Then 50 Rng.Offset(0, 2).Value = "" 51 Rng.Offset(0, 4).Value = "" 52End If 53 54 55'U列に実績日が入ったら、V列に20営業日後を入れておく 56If IsDate(Cells(Rng.Row, "U")) = True And Rng.Row <> 1 Then 57 Cells(Rng.Row, "V").Value = j 58 Cells(Rng.Row, "V").NumberFormatLocal = "yyyy/mm/dd" 59'U列の日付が消されたら、V/X列の日付も消す 60 ElseIf Rng.Value = "" And Rng.Column = 21 And Rng.Row <> 1 Then 61 Rng.Offset(0, 1).Value = "" 62 Rng.Offset(0, 3).Value = "" 63End If 64 65 66'V列に予定日が入ったら、X列に30営業日後を入れておく 67If IsDate(Cells(Rng.Row, "V")) = True And Rng.Row <> 1 Then 68 Cells(Rng.Row, "X").Value = k 69 Cells(Rng.Row, "X").NumberFormatLocal = "yyyy/mm/dd" 70'V列の日付が消されたら、X列の日付も消す 71 ElseIf Rng.Value = "" And Rng.Column = 22 And Rng.Row <> 1 Then 72 Rng.Offset(0, 2).Value = "" 73End If 74 75 76'W列に実績日が入ったら、X列に30営業日後を入れておく 77If IsDate(Cells(Rng.Row, "W")) = True And Rng.Row <> 1 Then 78 Cells(Rng.Row, "X").Value = k 79 Cells(Rng.Row, "X").NumberFormatLocal = "yyyy/mm/dd" 80'W列の日付が消されたら、X列の日付も消す 81 ElseIf Rng.Value = "" And Rng.Column = 23 And Rng.Row <> 1 Then 82 Rng.Offset(0, 1).Value = "" 83End If 84 85Next 86 87Application.EnableEvents = True 88 89End Sub 90
発生している問題
V列でDeleteボタンを押した際、X列も自動的に削除されるはずだが、なぜか日付が入ってしまう。 その日付は本日時点でV列が"1900/1/27"、X列が"1900/2/10"となっている。 X列でDeleteボタンを押しても削除されず、上記日付が入ったままとなっている。
該当のソースコード
VBA
1'V列に予定日が入ったら、X列に30営業日後を入れておく 2If IsDate(Cells(Rng.Row, "V")) = True And Rng.Row <> 1 Then 3 Cells(Rng.Row, "X").Value = k 4 Cells(Rng.Row, "X").NumberFormatLocal = "yyyy/mm/dd" 5'V列の日付が消されたら、X列の日付も消す 6 ElseIf Rng.Value = "" And Rng.Column = 22 And Rng.Row <> 1 Then 7 Rng.Offset(0, 2).Value = "" 8End If
試したこと
例えばU列でDeleteボタンを押すと問題なく動くし、それ以前の列(Rなど)でも問題なく削除動作はされる。
Worksheet_Changeイベントしか記入がありませんが、
肝心のDeleteボタンで呼び出す関数も記入してもらえると
原因を考えれると思います。
回答1件
あなたの回答
tips
プレビュー