asesja, благодарю за интересное решение с использованием VBA и словаря, который убирает повторяющиеся значения, хотя в этой задаче это не требуется. Можно и упростить код с помощью TextJoin:
Код |
---|
Sub Выпадающий()
Dim ws As Worksheet
Dim combinedList As Variant
Set ws = ThisWorkbook.Sheets("Лист1")
combinedList = Application.WorksheetFunction.TextJoin(",", True, ws.Range("A1:A5"), ws.Range("B1:D1"))
With ws.Range("F1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=combinedList
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End Sub |
Но всё дело в том, что таких столбцов "A1:A5" в проекте будет много и высотой они будут в несколько сотен строк и при каждом изменении ячейки будет вызываться эта процедура, перебирающая в цикле каждое значение в столбце, это сильно замедлит работу.
Хотелось бы найти красивое решение c формулами без использования кода VBA.