Yuk
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору init0 2 способа. 1. С формулами. Плюс - не нужно использовать VBA. Минусы - если наименование не найдено или не введено, выдаст ошибку; при вводе новых строк, нужно также копировать формулы. 2. Через VBA. Плюсы и минусы противоположные формулам. А также более гибкая обработка ошибок; макрос запускается при любом изменении на листе расчетов. Какой вариант выбрать - решать тебе. Итак, 1. В ячейку B2 листа ЛистКалькуляция вводишь формулу: Код: =ИНДЕКС(ЛистСортамент!B$2:B$200;ПОИСКПОЗ(ЛистКалькуляция!$A2;ЛистСортамент!$A$2:$A$200;0);1) | Обрати внимание на расстановку $, это важно. Копируешь формулу в ячейки C2, F2, G2. В ячейках F2 и G2 надо будет формулу подредактировать, заменив F на Д и G на E. Затем копируешь (или Ctrl-D) всю строку с формулами вниз. Если $ расставлены правильно, ссылки должны измениться со строкой. Если ячейка в столбце А пустая или это наименование не найдено, в ячейках с формулами будет ошибка, что-то типа НЕТ ДАННЫХ. Можно, конечно, поместить формулы в ЕСЛИ(ЕНД(...);...;""), но это дополнительное усложнение. 2. Жмешь Alt-F11 для перехода в редактор VBA. В левой панели находишь свою книгу и лист ЛистКалькуляция. Правым кликом открываешь страницы с Кодом. Туда вводишь: Код: Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Target.Column = 1 Then Set r = Worksheets("ЛистСортамент").Range("A2:A29").Find(Target.Value, LookIn:=xlValues, LookAt:=xlWhole) If r Is Nothing Then Cells(Target.Row, 2).Value = "" Cells(Target.Row, 3).Value = "" Cells(Target.Row, 6).Value = "" Cells(Target.Row, 7).Value = "" Exit Sub End If Cells(Target.Row, 2).Value = Worksheets("ЛистСортамент").Cells(r.Row, 2).Value Cells(Target.Row, 3).Value = Worksheets("ЛистСортамент").Cells(r.Row, 3).Value Cells(Target.Row, 6).Value = Worksheets("ЛистСортамент").Cells(r.Row, 4).Value Cells(Target.Row, 7).Value = Worksheets("ЛистСортамент").Cells(r.Row, 5).Value End If End Sub | Если в листе ЛистСортамент есть несколько строк с одинаковым наименованием, в обоих вариантах находится первая строка. Наименование должно быть введено полностью. Чтобы в листе ЛистКалькуляция можно было выбрать наименование из списка. Можно было бы сделать через Данные - Проверка - Список. Но область списка не может быть из другого листа. Потому только через макрос (вставляется в новый модуль): Код: Sub FillList() Dim frm As String Dim nr As Long Dim c As Range frm = "" With Sheets("ЛистСортамент") nr = .UsedRange.Rows.Count For Each c In Range(.Cells(2, 1), .Cells(nr, 1)) frm = frm & "," & c.Value Next End With With Selection.Validation .Delete .Add Type:=xlValidateList, Formula1:=frm .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = False End With End Sub | Макрос можно повесить на кнопку (ячейки, для которых нужен список должны быть предварительно выделены) или (с небольшими изменениями) на изменение листа ЛистСортамент. При добавлении строк в ЛистКалькуляция макрос перезапускать не обязательно, достаточно скопировать формат предыдущих ячеек. Вроде все. | Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:08 20-07-2006 | Исправлено: Yuk, 20:09 20-07-2006 |
|