Изменение вручную по сравнению с раскрывающимся списком не должно иметь значения, за исключением случаев, когда, возможно, где-то еще в вашем коде события отключаются и не включаются снова, или, возможно, вычисления устанавливаются вручную и, таким образом, не приводят к изменению значения формулы,поэтому, даже если код срабатывает, значения столбцов не изменяются.
Тем не менее, приведенный ниже код поможет вам, потому что он не будет пытаться скрыть / показать при каждом изменении ячейки, но только при изменении D2.
Private Sub Worksheet_Change(ByVal Target As Range)
If target.address = "$D$2" Then
Dim c As Range
For Each c In Sheets("P_MM6").Range("G4:FC4").Cells
c.EntireColumn.Hidden = c.Value = 0
Next c
End If
End Sub
Также убедитесь, что вычисления установлены в автоматический режим и они не отключаются где-то в вашем коде, а также что события не отключаются и не включаются сноваостальное в коде.
Если все это не поможет, поставьте точку останова на строке кода Worksheet_Change
и измените ячейку с помощью раскрывающегося списка и посмотрите, что произойдет.