Страницы: 1
RSS
Выпадающий список с условием, Создание выпадающего списка с условием в рядом стоящей ячейке.
 
Добрый день,
Задача следующая в ячейке B- имеем основного поставщика,(У него есть свои поставщики) необходимо чтобы в ячейки С можно было выбрать из списка поставщиком привязанных к основному поставщику.
Список поставщиков ежедневно дополняется на новом листе.
Изменено: БМВ - 15.08.2022 17:22:18
 
Вопрос где? Смотрите в приемах зависимые выпадающие списки, подозреваю вам это нужно.
Изменено: V - 12.08.2022 09:14:50
 
Почему то не отобразился вопрос, задача следующая,
В ячейке B имеем основных поставщиков необходимо чтобы в ячейке C можно было выбрать только тех поставщиков из списка которые привязаны к поставщику в ячейке B.
список поставщиков ежедневно дополняется.
Изменено: Сергей Ков - 12.08.2022 09:24:35
 
Ловите
Список должен быть отсортирован по столбцу А
Скажи мне, кудесник, любимец ба’гов...
 
Здравствуйте, так же можете посмотреть ЗДЕСЬ
 
Вариант макросом.
Код
'v2
Sub SetValidation()
    SetSheetValidation Sheets("Лист1")
End Sub

Sub SetSheetValidation(sh As Worksheet)
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    dic.CompareMode = 1
    InitValidation dic, Sheets("СПИСОК Поставщиков")

    Dim cl As Range
    For Each cl In sh.UsedRange.Columns(2).Cells
        SetCellValidation cl, dic
    Next
End Sub

Private Sub InitValidation(dic As Object, sh As Worksheet)
    Dim dicY As Object
    Set dicY = CreateObject("Scripting.Dictionary")
    dicY.CompareMode = 1
    
    Dim dicN As Object
    Set dicN = CreateObject("Scripting.Dictionary")
    dicN.CompareMode = 1
    Dim dicI As Object
    
    
    With sh
        Dim yy As Long
        yy = .Cells(.Rows.Count, 1).End(xlUp).Row
        Dim arr As Variant
        arr = .Cells(1, 1).Resize(yy, 2)
    End With
    For yy = 1 To UBound(arr, 1)
        If Not IsEmpty(arr(yy, 1)) Then
            If Not dicY.Exists(arr(yy, 1)) Then
                dicY.Item(arr(yy, 1)) = yy
                Set dicN.Item(arr(yy, 1)) = CreateObject("Scripting.Dictionary")
            End If
            dicN.Item(arr(yy, 1)).Item(arr(yy, 2)) = 0
        End If
    Next
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Dim Application_Calculation As Long
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual

    Dim sValidation As String
    Dim vv As Variant
    For Each vv In dicY.Keys()
        yy = dicY.Item(vv)
        Set dicI = dicN.Item(vv)
        With sh.Cells(yy, 4).Resize(1, dicI.Count)
            .Value = dicI.Keys()
            sValidation = "='" & sh.Name & "'!" & .Address(1, 1)
        End With
        dic.Item(arr(yy, 1)) = sValidation
    Next

    Application.Calculation = Application_Calculation
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

Private Sub SetCellValidation(cl As Range, dic As Object)
    With cl.Cells(1, 2).Validation
        .Delete
        If dic.Exists(cl.Value) Then
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=dic.Item(cl.Value)
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = False
            .ShowError = True
        End If
    End With
End Sub
Изменено: МатросНаЗебре - 12.08.2022 10:59:28
 
Спасибо, заработало.
Страницы: 1
Наверх