Страницы: 1
RSS
[ Закрыто ] Копирование диапазона ячеек с условием из выпадающего списка
 
Здравствуйте!
Очень нужна Ваша помощь
Пока не силен в EXCELe, но очень хочу больше узнать... а тут как раз поставили вроде простую задачу:

В столбце А Главного листа выбирается из выпадающего списка тип лодки (это у меня получилось :) )
На листе Данные есть спецификации по каждому типу лодки (материал и количество)
Задача: по значению из столбца А нужно вставить диапазон данных из листа Данные, которые соответствуют типу лодки, в столбцы B и С листа Главная
т.е если это лодка А300L то и вставляем данные для А300L из колонок C и D листа Данные.
     если это лодка А330L то и вставляем данные для А330L из колонок F и G листа Данные
И так далее, если потом выбираем ниже другую лодку - справа появляются данные другой лодки в Главном листе

Помогите это реализовать, пожалуйста!
 
ВПР - Вам в помощь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Добрый день!
до ВПР необходимо данные привести в нормальный вид
 
это на листе Данные? Чуток проясните, пожалуйста

Цитата
Ігор Гончаренко написал: ВПР - Вам в помощь
Подскажите, пожалуйста, хоть одним примером на этом файле, дальше может сам пойму
 
Цитата
marchela написал: по значению из столбца А нужно вставить диапазон данных из листа Данные, которые соответствуют типу лодки
Если диапазон да еще одним махом - то скорее всего только макросом. Да еще, наверное, одним диапазоном не обойдетесь, если лодки разные... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Сможете помочь?
 
marchela, вообщем вот такой вариантик формулы массива (взято за основу из приемов https://www.planetaexcel.ru/techniques/2/81/)

Обращаю Ваше внимание что написание моделей (или что это такое) A300L и т.д. в некоторых случаях отличается тому что написано в выпадающем списке и в табличном для корректной работы приведите их в порядок (в примере исправил).
для B3
Код
=ЕСЛИОШИБКА(ИНДЕКС(Данные!$C$3:$J$14;НАИМЕНЬШИЙ(ЕСЛИ(""<>Данные!$I$3:$I$14;СТРОКА(Данные!$I$3:$I$14)-2;"");СТРОКА()-(ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A3:$A$3);A:A;0)-1));ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A$3:$A14);Данные!$C$2:$J$2;0));"")

для С3
Код
=ЕСЛИОШИБКА(ИНДЕКС(Данные!$C$3:$J$14;НАИМЕНЬШИЙ(ЕСЛИ(""<>Данные!$I$3:$I$14;СТРОКА(Данные!$I$3:$I$14)-2;"");СТРОКА()-(ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A3:$A$3);A:A;0)-1));ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A$3:$A14);Данные!$C$2:$J$2;0)+1);"")
Изменено: Mershik - 30.11.2018 18:55:17
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
выбирается из выпадающего списка тип лодки
В А3 из выпадающего списка выбираете нужную лодку
В модуль листа Главная
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("A3")) Is Nothing Then
    Application.EnableEvents = False
Dim FoundLodka As Range
Dim iLastRow As Integer
Dim iLR As Integer
    iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
    If iLastRow >= 3 Then Range("B3:C" & iLastRow).Clear
    With Worksheets("Данные")
      Set FoundLodka = .Rows(2).Find(Target, , xlValues, xlWhole)
      If Not FoundLodka Is Nothing Then
       iLR = .Cells(Rows.Count, FoundLodka.Column).End(xlUp).Row
       .Range(.Cells(3, FoundLodka.Column), .Cells(iLR, FoundLodka.Column + 1)).Copy Range("B3")
      Else
        MsgBox "На листе Данные нет комплектации для лодки " & Target
      End If
    End With
  End If
    Application.EnableEvents = True
End Sub
И послушайте совета из #7 по поводу написания типов лодок
 
Kuzmich, спасибо большое!
Работает!
Но это только для выбора одной лодки,
а Нужно: - выбрали одну лодку-в колонках B и С появились ее данные,
              - теперь ниже в колонке A выбираем другую лодку - в колонках B и С появились ее данные
              - и т.д. вниз
И еще бы предусмотреть запас расширения данных о лодках а листе Данные (будут добавляться новые лодки

Спасибо за ответ
 
Цитата
Mershik написал:
marchela , вообщем вот такой вариантик формулы массива (взято за основу из приемов  https://www.planetaexcel.ru/techniques/2/81/ )Обращаю Ваше внимание что написание моделей (или что это такое) A300L и т.д. в некоторых случаях отличается тому что написано в выпадающем списке и в табличном для корректной работы приведите их в порядок (в примере исправил).для B3
Спасибо огромное!

Работает!

За замечание- спасибо, я так понял где-то в моделях лодки была кирилица вместо латиницы?

И еще бы предусмотреть запас расширения данных о лодках а листе Данные (будут добавляться новые лодки) или может просто формулу массива заранее намного увеличить!

Спасибо за ответ
Изменено: marchela - 03.12.2018 12:52:33
 
marchela, вернитесь в свои сообщения и удалите то, что Вы по ошибке считаете цитатой. Кнопка цитирования не для ответа!
 
marchela, просто протяните ниже когда будет новая лодка и все...
Изменено: Mershik - 03.12.2018 12:50:10
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
marchela , просто протяните ниже конгда будет новая лодка и все...
В листа Главная- это понятно
а в листе Данные лодки будут добавляться по колонкам вправо
Значит формулу надо расширять для них?
Изменено: marchela - 03.12.2018 12:53:47
 
marchela, да,
для изделия) по аналогии для
Код
=ЕСЛИОШИБКА(ИНДЕКС(Данные!$C$3:$XFD$100;НАИМЕНЬШИЙ(ЕСЛИ(""<>Данные!$I$3:$I$100;СТРОКА(Данные!$I$3:$I$100)-2;"");СТРОКА()-(ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A3:$A$3);A:A;0)-1));ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A$3:$A100);Данные!$C$2:$XFD$2;0));"")

для кол-во
Код
=ЕСЛИОШИБКА(ИНДЕКС(Данные!$C$3:$XFD$100;НАИМЕНЬШИЙ(ЕСЛИ(""<>Данные!$I$3:$I$100;СТРОКА(Данные!$I$3:$I$100)-2;"");СТРОКА()-(ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A3:$A$3);A:A;0)-1));ПОИСКПОЗ(ПРОСМОТР(2;1/($A$3:A3<>"");A$3:$A100);Данные!$C$2:$XFD$2;0)+1);"")
Не бойтесь совершенства. Вам его не достичь.
Страницы: 1
Наверх