Добрый день, уважаемые форумчане! Необходима помощь в решении следующей задачи: Требуется автоматически заполнить несколько ячеек текстовыми данными из исходной таблицы в зависимости от значения определенных ячеек в определенном столбце. Подробности в примере. Заранее спасибо всем отозвавшимся.
Добрый день, уважаемые форумчане! Необходима помощь в решении следующей задачи: Требуется автоматически заполнить несколько ячеек текстовыми данными из исходной таблицы в зависимости от значения определенных ячеек в определенном столбце. Подробности в примере. Заранее спасибо всем отозвавшимся.Webbear
Вообще работать будет даже если и различное кол-во строк, но просто при различных количествах может внизу оранжевых попасть значение из следующего блока
Если на втором листе у Вас все варианты по 11 строк (или по другому количеству, но чтобы одинаково), то вот так можно
Вообще работать будет даже если и различное кол-во строк, но просто при различных количествах может внизу оранжевых попасть значение из следующего блока_Boroda_
Вариант макросом в модуле листа работает при выборе наименования работ [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Target.Count > 1 Then Exit Sub If Target.Offset(0, 7) <> "" Then MsgBox "В этой строке есть наименование" Exit Sub End If With Sheets(2) Set r = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)) Set cl = r.Find(what:=Target.Value).Offset(1, 1) If Not cl Is Nothing Then vr = .Range(cl, cl.End(xlDown)).Value Target.Offset(1, 7).Resize(UBound(vr), 1) = vr Target.Offset(0, 4).FormulaR1C1 = "=SUM(R[1]C[6]:R[" & UBound(vr) & "]C[6])" End If End With End Sub
[/vba]
Вариант макросом в модуле листа работает при выборе наименования работ [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Target.Count > 1 Then Exit Sub If Target.Offset(0, 7) <> "" Then MsgBox "В этой строке есть наименование" Exit Sub End If With Sheets(2) Set r = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)) Set cl = r.Find(what:=Target.Value).Offset(1, 1) If Not cl Is Nothing Then vr = .Range(cl, cl.End(xlDown)).Value Target.Offset(1, 7).Resize(UBound(vr), 1) = vr Target.Offset(0, 4).FormulaR1C1 = "=SUM(R[1]C[6]:R[" & UBound(vr) & "]C[6])" End If End With End Sub
Спасибо, оба варианта работают, но есть одно НО! В обоих вариантах при удалении наименования работ не очищается заполненный диапазон. В варианте с макросом из-за описанного выше возможно наложение вновь выбранного диапазона на ранее заполненный при изменении наименования работ.
Спасибо, оба варианта работают, но есть одно НО! В обоих вариантах при удалении наименования работ не очищается заполненный диапазон. В варианте с макросом из-за описанного выше возможно наложение вновь выбранного диапазона на ранее заполненный при изменении наименования работ.Webbear
кроме бабы Ванги и Вас никто не знал, что чистить тоже надо.. Добавил [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Target.Count > 1 Then Exit Sub If Target.Offset(0, 7) <> "" Then MsgBox "В этой строке есть наименование" Exit Sub End If If Target.Value <> "" Then With Sheets(2) Set r = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)) Set cl = r.Find(what:=Target.Value).Offset(1, 1) If Not cl Is Nothing Then vr = .Range(cl, cl.End(xlDown)).Value Target.Offset(1, 7).Resize(UBound(vr), 1) = vr Target.Offset(0, 4).FormulaR1C1 = "=SUM(R[1]C[6]:R[" & UBound(vr) & "]C[6])" End If End With Else If Cells(Rows.Count, 2).End(xlUp).Row <= Target.Row Then Set ec = Cells(Rows.Count, 9).End(xlUp) Else: Set ec = Target.End(xlDown).Offset(0, 7) End If Target.Offset(0, 4) = "" Range(Target.Offset(0, 7), ec).ClearContents End If End Sub
кроме бабы Ванги и Вас никто не знал, что чистить тоже надо.. Добавил [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Target.Count > 1 Then Exit Sub If Target.Offset(0, 7) <> "" Then MsgBox "В этой строке есть наименование" Exit Sub End If If Target.Value <> "" Then With Sheets(2) Set r = .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp)) Set cl = r.Find(what:=Target.Value).Offset(1, 1) If Not cl Is Nothing Then vr = .Range(cl, cl.End(xlDown)).Value Target.Offset(1, 7).Resize(UBound(vr), 1) = vr Target.Offset(0, 4).FormulaR1C1 = "=SUM(R[1]C[6]:R[" & UBound(vr) & "]C[6])" End If End With Else If Cells(Rows.Count, 2).End(xlUp).Row <= Target.Row Then Set ec = Cells(Rows.Count, 9).End(xlUp) Else: Set ec = Target.End(xlDown).Offset(0, 7) End If Target.Offset(0, 4) = "" Range(Target.Offset(0, 7), ec).ClearContents End If End Sub
Подскажите пожалуйста еще, если не трудно, как дополнить код, чтобы заполнить ячейки К17:K25 в виде Лист1!E3:E10*D$16, К27:K34 в виде Лист1!E41:E48*D$26 и.т.д. аналогично выше описанному в зависимости от значения в столбце "В"
Подскажите пожалуйста еще, если не трудно, как дополнить код, чтобы заполнить ячейки К17:K25 в виде Лист1!E3:E10*D$16, К27:K34 в виде Лист1!E41:E48*D$26 и.т.д. аналогично выше описанному в зависимости от значения в столбце "В"Webbear