Написал это некоторое время назад для другой цели, изменил и добавил некоторые комментарии.
Поместите в ThisWorkbook и запустите макрос, напечатав (без кавычек) «_» в любой ячейке, кроме столбца 4 (D: D) и затем нажмите Enter.
Кроме того, ваши именованные диапазоны должны заканчиваться символом "_" (например, "deposit_"), это связано с состоянием второго регистра и необходимо избегать срабатывания при редактированииописательная ячейка текста.
Ввод "-" и нажатие клавиши Enter удаляют проверку и значение.
Public Str As String
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Index = 1 Then 'If you want to limit the reach of this
With Target
If .Count = 1 Then 'Limits to single cell to avoid errors
If .Column <> 4 Then 'So that it can't refer to itself unless you try in one of them named ranges
Select Case True
Case (.Value Like "_") 'Triggers if cell value equals "_"
For Each nm In ThisWorkbook.Names 'Adds all names to a string
Str = Str & "," & nm.Name
Next nm
.Validation.Delete 'Removes previous validation
.Validation.Add Type:=xlValidateList, Formula1:=Replace(Str, ",", "", 1, 1) 'Adds the list of names to validation
.Validation.ShowError = False 'Makes it possible edit without removing validation
.Select: SendKeys ("%{UP}") 'Triggers the dropdown list
Case (.Value Like "*_") 'Triggers if cell value ends with "_"
.FormulaR1C1 = "=RC4*" & .Value 'Applies formula
Case (.Value Like "-") 'Triggers if cell value equals "-"
.Validation.Delete 'Removes validation from cell
.Value = "" 'Removes value
End Select
Str = "" 'Empties out string
End If
End If
End With
End If
End Sub