Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вставка значения в Данные/Проверка данных/Список с условием - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Вставка значения в Данные/Проверка данных/Список с условием
Canopm Дата: Пятница, 24.05.2019, 22:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте уважаемые гуру Excel.

Выбрав на листе «ДЕТАЛИ_ЛИТЬЕ» в столбце «Категория» (D) необходимо чтобы в столбцах E, F, G, H, I (ТПА1-5) выпадал для вставки список тех ТПА которые соответствуют выбранной «Категории» (столбец D) и с отсутствием уже вставленных в ячейки наименований ТПА.

К примеру в столбце ТПА1 (Е) уже был вставлен «003» при условии Категории – "Крупное литье" в столбце D, то "003" больше не появляется в спадающих списках этой строки в колонках ТПА2, 3, 4, 5. Говоря простым языком деталь может изготавливаться на нескольких ТПА, но только одной из «категорий»

Все соответствия по категориям ТПА приведены на листе «ТПА» построчно.

Подскажите как это реализовать в Excel?
К сообщению приложен файл: __v.0.0.2.xlsx (17.1 Kb)


Свою жизнь надо устраивать до тех пор пока она не начнет устраивать Вас !!!
 
Ответить
СообщениеЗдравствуйте уважаемые гуру Excel.

Выбрав на листе «ДЕТАЛИ_ЛИТЬЕ» в столбце «Категория» (D) необходимо чтобы в столбцах E, F, G, H, I (ТПА1-5) выпадал для вставки список тех ТПА которые соответствуют выбранной «Категории» (столбец D) и с отсутствием уже вставленных в ячейки наименований ТПА.

К примеру в столбце ТПА1 (Е) уже был вставлен «003» при условии Категории – "Крупное литье" в столбце D, то "003" больше не появляется в спадающих списках этой строки в колонках ТПА2, 3, 4, 5. Говоря простым языком деталь может изготавливаться на нескольких ТПА, но только одной из «категорий»

Все соответствия по категориям ТПА приведены на листе «ТПА» построчно.

Подскажите как это реализовать в Excel?

Автор - Canopm
Дата добавления - 24.05.2019 в 22:04
_Igor_61 Дата: Пятница, 24.05.2019, 22:29 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Заполнение идет справа налево? Это "003" может изначально присутствовать в другом столбце? Во всем столбце или в одной строке?
 
Ответить
СообщениеЗаполнение идет справа налево? Это "003" может изначально присутствовать в другом столбце? Во всем столбце или в одной строке?

Автор - _Igor_61
Дата добавления - 24.05.2019 в 22:29
Canopm Дата: Пятница, 24.05.2019, 23:08 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Igor_61,



ввод может быть произвольно осуществлен, условий для последовательности ввода нет. Начинаться может не со столбца "Е".
ввод с вычетом должен идти по строке. в окне выбора не должно быть 033 и 059 (смотри картинку)
Скриншот сделал не Excel, так нарисовал.


Свою жизнь надо устраивать до тех пор пока она не начнет устраивать Вас !!!

Сообщение отредактировал Canopm - Пятница, 24.05.2019, 23:10
 
Ответить
Сообщение_Igor_61,



ввод может быть произвольно осуществлен, условий для последовательности ввода нет. Начинаться может не со столбца "Е".
ввод с вычетом должен идти по строке. в окне выбора не должно быть 033 и 059 (смотри картинку)
Скриншот сделал не Excel, так нарисовал.

Автор - Canopm
Дата добавления - 24.05.2019 в 23:08
_Boroda_ Дата: Суббота, 25.05.2019, 01:23 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16913
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
В модуль листа
[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
[/vba]
К сообщению приложен файл: _v.0.0_2.xlsm (27.4 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
В модуль листа
[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
[/vba]

Автор - _Boroda_
Дата добавления - 25.05.2019 в 01:23
bmv98rus Дата: Суббота, 25.05.2019, 07:40 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
К сожалению без VBA не обошлось, но правда он минимален
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("E:i")) Is Nothing Then Application.Calculate
End Sub
[/vba]
А вот список автоматом через
Код
=IFERROR(INDEX(ТПА[№ ТПА];SMALL(IF((ТПА[Категория]=INDEX(ДЕТАЛИ_ЛИТЬЕ!D:D;ROW(INDIRECT(CELL("address")))))*ISERROR(MATCH(ТПА[№ ТПА];INDEX(ДЕТАЛИ_ЛИТЬЕ!E:I;ROW(INDIRECT(CELL("address"))););0));ROW(ТПА[Категория])-1);ROW(ТПА!A1)));"")
и
Код
=OFFSET(СПИСКИ!$F$2;;;NOW()*0+COUNTIF(СПИСКИ!$F:$F;">""")-1)
К сообщению приложен файл: Copy_of_960_1.xlsm (24.6 Kb)


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеК сожалению без VBA не обошлось, но правда он минимален
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("E:i")) Is Nothing Then Application.Calculate
End Sub
[/vba]
А вот список автоматом через
Код
=IFERROR(INDEX(ТПА[№ ТПА];SMALL(IF((ТПА[Категория]=INDEX(ДЕТАЛИ_ЛИТЬЕ!D:D;ROW(INDIRECT(CELL("address")))))*ISERROR(MATCH(ТПА[№ ТПА];INDEX(ДЕТАЛИ_ЛИТЬЕ!E:I;ROW(INDIRECT(CELL("address"))););0));ROW(ТПА[Категория])-1);ROW(ТПА!A1)));"")
и
Код
=OFFSET(СПИСКИ!$F$2;;;NOW()*0+COUNTIF(СПИСКИ!$F:$F;">""")-1)

Автор - bmv98rus
Дата добавления - 25.05.2019 в 07:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!