Выбрав на листе «ДЕТАЛИ_ЛИТЬЕ» в столбце «Категория» (D) необходимо чтобы в столбцах E, F, G, H, I (ТПА1-5) выпадал для вставки список тех ТПА которые соответствуют выбранной «Категории» (столбец D) и с отсутствием уже вставленных в ячейки наименований ТПА.
К примеру в столбце ТПА1 (Е) уже был вставлен «003» при условии Категории – "Крупное литье" в столбце D, то "003" больше не появляется в спадающих списках этой строки в колонках ТПА2, 3, 4, 5. Говоря простым языком деталь может изготавливаться на нескольких ТПА, но только одной из «категорий»
Все соответствия по категориям ТПА приведены на листе «ТПА» построчно.
Подскажите как это реализовать в Excel?
Здравствуйте уважаемые гуру Excel.
Выбрав на листе «ДЕТАЛИ_ЛИТЬЕ» в столбце «Категория» (D) необходимо чтобы в столбцах E, F, G, H, I (ТПА1-5) выпадал для вставки список тех ТПА которые соответствуют выбранной «Категории» (столбец D) и с отсутствием уже вставленных в ячейки наименований ТПА.
К примеру в столбце ТПА1 (Е) уже был вставлен «003» при условии Категории – "Крупное литье" в столбце D, то "003" больше не появляется в спадающих списках этой строки в колонках ТПА2, 3, 4, 5. Говоря простым языком деталь может изготавливаться на нескольких ТПА, но только одной из «категорий»
Все соответствия по категориям ТПА приведены на листе «ТПА» построчно.
ввод может быть произвольно осуществлен, условий для последовательности ввода нет. Начинаться может не со столбца "Е". ввод с вычетом должен идти по строке. в окне выбора не должно быть 033 и 059 (смотри картинку) Скриншот сделал не Excel, так нарисовал.
_Igor_61,
ввод может быть произвольно осуществлен, условий для последовательности ввода нет. Начинаться может не со столбца "Е". ввод с вычетом должен идти по строке. в окне выбора не должно быть 033 и 059 (смотри картинку) Скриншот сделал не Excel, так нарисовал.Canopm
Свою жизнь надо устраивать до тех пор пока она не начнет устраивать Вас !!!
Сообщение отредактировал Canopm - Пятница, 24.05.2019, 23:10
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d_ As Range, d0_ As Range Set d_ = Target(1) Set d0_ = Range("ДеталиЛитье[[ТПА1]:[ТПА5]]") If Not Intersect(d_, d0_) Is Nothing Then r_ = d_.Row Set slov = CreateObject("Scripting.Dictionary") With slov For Each dd_ In Intersect(Rows(r_), d0_) If dd_ <> Empty Then If dd_ <> d_ Then aaa = .Item(dd_.Value) End If End If Next dd_ ar = Sheets("ТПА").Range("ТПА[[№ ТПА]:[Категория]]") k_ = Intersect(Rows(r_), Range("ДеталиЛитье[Категория]")) raz_ = "," For i = 1 To UBound(ar) If ar(i, 3) = k_ Then If Not .Exists(ar(i, 1)) Then t_ = t_ & raz_ & ar(i, 1) End If End If Next i End With If t_ <> "" Then t_ = Mid(t_, Len(raz_) + 1) d0_.Validation.Delete d_.Validation.Add Type:=xlValidateList, Formula1:=t_ End If End If End Sub
[/vba]
Так нужно? В модуль листа [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d_ As Range, d0_ As Range Set d_ = Target(1) Set d0_ = Range("ДеталиЛитье[[ТПА1]:[ТПА5]]") If Not Intersect(d_, d0_) Is Nothing Then r_ = d_.Row Set slov = CreateObject("Scripting.Dictionary") With slov For Each dd_ In Intersect(Rows(r_), d0_) If dd_ <> Empty Then If dd_ <> d_ Then aaa = .Item(dd_.Value) End If End If Next dd_ ar = Sheets("ТПА").Range("ТПА[[№ ТПА]:[Категория]]") k_ = Intersect(Rows(r_), Range("ДеталиЛитье[Категория]")) raz_ = "," For i = 1 To UBound(ar) If ar(i, 3) = k_ Then If Not .Exists(ar(i, 1)) Then t_ = t_ & raz_ & ar(i, 1) End If End If Next i End With If t_ <> "" Then t_ = Mid(t_, Len(raz_) + 1) d0_.Validation.Delete d_.Validation.Add Type:=xlValidateList, Formula1:=t_ End If End If End Sub