Здравствуйте. Не могу решить следующую задачу - как при выборе из выпадающего списка (товар 1 или товар 2), получать рядом состав выбранного товара в нескольчик ячейках (для 1 - 1,2,3, для 2 -4,5,6 (кол-во элементов может меняться)). Вообщем главная сложность как получить массив автоматом при выборе из выпадающего списка значения. Руками как сделать понятно - формула ДВССЫЛ, далее выделяем массив и ctrl+shift+enter, а автоматом не соображу.
Здравствуйте. Не могу решить следующую задачу - как при выборе из выпадающего списка (товар 1 или товар 2), получать рядом состав выбранного товара в нескольчик ячейках (для 1 - 1,2,3, для 2 -4,5,6 (кол-во элементов может меняться)). Вообщем главная сложность как получить массив автоматом при выборе из выпадающего списка значения. Руками как сделать понятно - формула ДВССЫЛ, далее выделяем массив и ctrl+shift+enter, а автоматом не соображу.airwaves18244
AlexM, Чтобы выбрать "продукт2" из списка в ячейке Е14, а в F14:F16 вставились значения 4,5,6
P.S Добавил макрос
Sub macros 2() ' macros 2 ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-1])" 'ввод формулы в F14 Range("F14:F16").Select Selection.FormulaArray = "=INDIRECT(RC[-1])" Range("F14:F16").Select 'ввод формулы в F14:F16 End Sub
Заполняет нужные ячейки. Возникает вопрос - а можно сделать диапазон F14:F16 динамически меняющийся, в зависимости от выбранного значения из списка (продукт1, продукт2). Например, если в продукт1 5 значений, то выделяется диапазон из 5 ячеек, а если 7 значений, то 7 ячеек?
AlexM, Чтобы выбрать "продукт2" из списка в ячейке Е14, а в F14:F16 вставились значения 4,5,6
P.S Добавил макрос
Sub macros 2() ' macros 2 ActiveCell.FormulaR1C1 = "=INDIRECT(RC[-1])" 'ввод формулы в F14 Range("F14:F16").Select Selection.FormulaArray = "=INDIRECT(RC[-1])" Range("F14:F16").Select 'ввод формулы в F14:F16 End Sub
Заполняет нужные ячейки. Возникает вопрос - а можно сделать диапазон F14:F16 динамически меняющийся, в зависимости от выбранного значения из списка (продукт1, продукт2). Например, если в продукт1 5 значений, то выделяется диапазон из 5 ячеек, а если 7 значений, то 7 ячеек?airwaves18244
Сообщение отредактировал airwaves18244 - Четверг, 13.12.2012, 15:47
Тогда без макроса не обойтись Код в модуле Лист1 [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "E14" Then Range(Target.Value).Copy (Sheets("Лист1").Range("F14")) End If End Sub
[/vba]
Пояснение. В коде Target.Value - это имя диапазона, продукт1 или продукт2. Какой размер имеет именованный диапазон, столько ячеек копируется. Если диапазоны разного размера, то в начале кода надо очищать место под вставку.
Тогда без макроса не обойтись Код в модуле Лист1 [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "E14" Then Range(Target.Value).Copy (Sheets("Лист1").Range("F14")) End If End Sub
[/vba]
Пояснение. В коде Target.Value - это имя диапазона, продукт1 или продукт2. Какой размер имеет именованный диапазон, столько ячеек копируется. Если диапазоны разного размера, то в начале кода надо очищать место под вставку.AlexM
На любой не получится. Нельзя же, например, в E14 и F14. Ячейки можно перечислить в условии через Or или определять что ячейка попадает в допустимый диапазон, и тд. Доработанный код имеет очистку диапазона перед вставкой новых значений. и может работать с двумя ячейками E14 и H5 которые будут разрешены, как написал выше. [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "E14" Or Target.Address(0, 0) = "H5" Then Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End If End Sub
[/vba]
На любой не получится. Нельзя же, например, в E14 и F14. Ячейки можно перечислить в условии через Or или определять что ячейка попадает в допустимый диапазон, и тд. Доработанный код имеет очистку диапазона перед вставкой новых значений. и может работать с двумя ячейками E14 и H5 которые будут разрешены, как написал выше. [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "E14" Or Target.Address(0, 0) = "H5" Then Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End If End Sub
Так не поучится Target.Address(0, 0) = адрес ячейки где произошли изменения. Может быть так подойдет? [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "E14", "H5" Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End Select End Sub
[/vba] Через запятую указываете нужные ячейки.
Так не поучится Target.Address(0, 0) = адрес ячейки где произошли изменения. Может быть так подойдет? [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "E14", "H5" Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End Select End Sub
[/vba] Через запятую указываете нужные ячейки.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
AlexM, не смог задать столбец. Поэтому в лоб "E1", "E2", "E3", "E4", "E5", ... и так далее. Более 100 строк не предполагаю в одном документе, поэтому должно работать. Спасибо огромное!!Очень благодарен) Не пришлось городить трехэтажный кривой свой макрос)
AlexM, не смог задать столбец. Поэтому в лоб "E1", "E2", "E3", "E4", "E5", ... и так далее. Более 100 строк не предполагаю в одном документе, поэтому должно работать. Спасибо огромное!!Очень благодарен) Не пришлось городить трехэтажный кривой свой макрос)airwaves18244
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("E1:E100"), Target) Is Nothing Then Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End If End Sub
[/vba]
А так? [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("E1:E100"), Target) Is Nothing Then Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row + 5, Target.Column + 1)).ClearContents Range(Target.Value).Copy (Sheets("Лист1").Cells(Target.Row, Target.Column + 1)) End If End Sub