プロが教える店舗&オフィスのセキュリティ対策術

いつも大変お世話になっております。
今、試したら
If .Row Mod 2 = 0 And IsDate(.Value) Then
Cells(.Row, 5).Font.ColorIndex = 5
Else
Cells(.Row, 5).Font.ColorIndex = xlAutomatic
End If
行が 偶数 で 日付 なら 例えば8/8と
入力したらCells(.Row, 5).Font.ColorIndex = 5
になるはずが、
行 奇数 で Delete したときにはじめて、
Cells(.Row, 5).Font.ColorIndex = 5
になります。
おしえてくれませんでしょうか

Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim cnt As Long

With Target
st = .Address(False, False)
cnt = 1
Do While Mid(st, cnt, 1) Like "[A-Z]"
cnt = cnt + 1
Loop
st = Left(st, cnt - 1)

Select Case st

Case "E"

If .Row Mod 2 = 0 And IsDate(.Value) Then
Cells(.Row, 5).Font.ColorIndex = 5
Else
Cells(.Row, 5).Font.ColorIndex = xlAutomatic
End If

If .Row Mod 2 = 1 And IsDate(.Value) Then
Cells(.Row, 5).Font.ColorIndex = 3
Cells(.Row - 1, 5).Font.ColorIndex = 3
Cells(.Row, 5).Interior.ColorIndex = 6
Cells(.Row - 1, 5).Interior.ColorIndex = 6
Cells(.Row, 3).Interior.ColorIndex = 6
Cells(.Row - 1, 3).Interior.ColorIndex = 6
Else
Cells(.Row, 5).Font.ColorIndex = xlAutomatic '?????xlNone???_?????????B?A???????B
Cells(.Row - 1, 5).Font.ColorIndex = 5
Cells(.Row, 5).Interior.ColorIndex = xlColorIndexNone
Cells(.Row - 1, 5).Interior.ColorIndex = xlColorIndexNone
Cells(.Row, 3).Interior.ColorIndex = xlColorIndexNone
Cells(.Row - 1, 3).Interior.ColorIndex = xlColorIndexNone
End If
End Select
End With
End Sub

「再質問 Private Sub Work」の質問画像

A 回答 (1件)

こんにちは



全体で何をどうしたいのかがわからないので、修正方法はわかりませんが・・・

>行が 偶数 で 日付 なら 例えば8/8と
>入力したらCells(.Row, 5).Font.ColorIndex = 5
>になるはずが、
Changeしたセルが、「偶数業で値が日付」の場合にどのように処理されるかを追ってみれば、

前半部分にご指摘のような記述があるので、そのように実行されます。
(コードの途中に Stop などを入れてみれば、目視確認できます)

一方で、同じ条件に対しては、後半の記述で
>Cells(.Row, 5).Font.ColorIndex = xlAutomatic
としているので、最終的に xlAutomatic が設定されることになっています。
    • good
    • 0
この回答へのお礼

Cells(.Row, 5).Font.ColorIndex = xlAutomatic
xlNone にしたらOKでした。
最初のコードばかり修正していました。
ありがとうございました。

お礼日時:2019/09/20 11:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!