Требуется удалять выпадающие списки из одних ячеек при изменении значения в других ячейках. При этом нужно обнулять значения в ячейках, в которых остались значения от последнего выбора из этих выпадающих списков. Как это реализовать формулами? Ну на крайний случай можно макросом, если формулами никак. Пример прилагаю.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Range("B3:B5")) Is Nothing Then 'Если ячейка пересекается с указанным диапазоном, то
For Each Cell In Range("B3:B5")
If Cell.Value = "" Then
Range("E" & Cell.Row).Value = ""
End If
Next Cell
End If
End Sub
Всё верно. Только я не понимаю, зачем там цикл - зачем каждый раз перебирать ВСЕ ячейки столбца В, если нужно удалить выпадающий список только в одной строке? И не вижу в коде удаления выпадающего списка. Есть только удаление значения.
Я тоже не вижу удаление выпадающего списка) Но в принципе код подходит, мне главное значения обнулять. В проверке данных я вставил функцию =ЕСЛИ(Значение в ячейке B<>"";диапазон для выпадающего списка;"") - как-то так решил сделать, т.к. пока не знаю как удалять выпадающие списки. Если их можно удалить как-то - было бы неплохо, только обязательно назад вернуть при условии что в столбце B появляются какие-либо значения.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Range("B3:B5")) Is Nothing Then 'Если ячейка пересекается с указанным диапазоном, то
Application.EnableEvents = False
If Target = "" Then
With Target.Offset(0, 3) 'Применительно к ячейке, смещённой на три столбца вправо
.Validation.Delete 'Удаляем выпадающий
.Value = ""
End With
End If
End If
Application.EnableEvents = True
End Sub
Уходим от темы про УДАЛЕНИЕ )) Включите макрорекордер и запишите вставку выпадающего списка. - получите код. Останется добавить:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Range("B3:B5")) Is Nothing Then 'Если ячейка пересекается с указанным диапазоном, то
Application.EnableEvents = False
If Target = "" Then
With Target.Offset(0, 3) 'Применительно к ячейке, смещённой на три столбца вправо
.Validation.Delete 'Удаляем выпадающий
.Value = ""
End With
Else
'Здесь строка добавления выпадающего
End If
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
If Not Intersect(Target, Range("B3:B5")) Is Nothing Then 'Если ячейка пересекается с указанным диапазоном, то
Application.EnableEvents = False
If Target = "" Then
With Target.Offset(0, 3) 'Применительно к ячейке, смещённой на три столбца вправо
.Validation.Delete 'Удаляем выпадающий
.Value = ""
End With
Else
Target.Offset(0, 3).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="+,-"
End If
End If
Application.EnableEvents = True
End Sub