Вы можете попробовать:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Long, i As Long, ParentKey As Long
Dim arr As Variant
Dim booClose As Boolean
With ThisWorkbook.Worksheets("Sheet1")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
If Not Intersect(Target, .Range("C2:C" & LastRow)) Is Nothing And Target.Count = 1 Then
If InStr(1, .Cells(Target.Row, 1).Value, ".") = 0 Then
MsgBox "You are trying to manually change Parent Status."
Else
ParentKey = Mid(.Cells(Target.Row, 1).Value, 1, InStr(1, .Cells(Target.Row, 1).Value, "."))
For i = 2 To LastRow
If InStr(1, .Cells(i, 1).Value, ".") <> 0 Then
If Mid(.Cells(i, 1).Value, 1, InStr(1, .Cells(i, 1).Value, ".")) = ParentKey Then
If .Cells(i, 3).Value = "Closed" Then
booClose = True
Else
booClose = False
Exit For
End If
End If
End If
Next i
For i = 2 To LastRow
If InStr(1, .Cells(i, 1).Value, ".") = 0 Then
If .Cells(i, 1).Value = ParentKey Then
Application.EnableEvents = False
If booClose = True Then
.Cells(i, 3).Value = "Closed"
Exit For
Else
.Cells(i, 3).Value = "Open"
Exit For
End If
Application.EnableEvents = True
End If
End If
Next i
End If
End If
End With
End Sub