Perhaps like this?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Not Intersect(Target, Range("D1,F1,H1")) Is Nothing Then
If Target = "-" Then Target.Offset(, 1) = "-"
End If
End If
End Sub
Sub ShowHideValues()
Select Case Me.Shapes("Check Box 9").ControlFormat.Value
Case 1
With ThisWorkbook.Sheets("Template")
.Range("D1,F1,H1").Interior.Color = 15395562
.Range("E1,G1,I1").Interior.Color = 12632256
.Range("D1:I1").Font.Color = vbBlack
End With
Case Else
With ThisWorkbook.Sheets("Template").Range("D1:I1")
.Value = "-"
.Interior.Color = vbWhite
.Font.Color = vbWhite
End With
End Select
End Sub
See attached.
One issue I can see is the user will still be able to use the dropdown lists even when the checkbox is "empty" and that could have data integrity implications.
It can be mitigated by removing the data validation when checkbox is cleared and reinstating it when the checkbox is checked.
BSB
Bookmarks