В общем задача такая, есть определенный список на Листе 1, где скажем покупатели записаны в столбике, а рядом их уникальные коды. А есть Лист 2 с таблицей, где мы выбираем покупателя из этого выпадающего списка, надо чтоб код этого клиента слева или справа, подставлялся сам, то есть подтягивался бы из Листа 1 и наоборот, при выборе кода выпадал бы покупатель. К сожалению формулы здесь не подходят, так как код или покупатель могут набираться в ручную, а это приведет к стиранию формулы.
Например- у Коли код 2000 на Листе 1 и если на Листе 2 я выбираю Колю, то в определенной ячейки (то есть рядом) должен появится код 2000 и так же с кодом, код 2000 = Коля
В общем задача такая, есть определенный список на Листе 1, где скажем покупатели записаны в столбике, а рядом их уникальные коды. А есть Лист 2 с таблицей, где мы выбираем покупателя из этого выпадающего списка, надо чтоб код этого клиента слева или справа, подставлялся сам, то есть подтягивался бы из Листа 1 и наоборот, при выборе кода выпадал бы покупатель. К сожалению формулы здесь не подходят, так как код или покупатель могут набираться в ручную, а это приведет к стиранию формулы.
Например- у Коли код 2000 на Листе 1 и если на Листе 2 я выбираю Колю, то в определенной ячейки (то есть рядом) должен появится код 2000 и так же с кодом, код 2000 = Коляenchanter
ikki, О нифига там сколько модулей)). А можно узнать какой это вытворяет и можно ли убрать значение "#Н/Д", ведь его потом нифига не убрать если сделать хоть раз выбор в строке, а то оно в отчете будет светится. Точнее, убрать можно но если только затирать обе ячейки сразу. А в остальном работает.
ikki, О нифига там сколько модулей)). А можно узнать какой это вытворяет и можно ли убрать значение "#Н/Д", ведь его потом нифига не убрать если сделать хоть раз выбор в строке, а то оно в отчете будет светится. Точнее, убрать можно но если только затирать обе ячейки сразу. А в остальном работает.enchanter
Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 10:34
В этом файле вообще нет стандартных модулей. Одна-единственная процедура обработки события - в модуле второго листа.
По поводу ошибки - не оч.понял вопрос. У Вас же там проверка данных и список... Проверка допустимости значения идет сначала на этом уровне... Но дополнил немного код...
Вам показан ПРИНЦИП работы - что поставленную задачу в принципе можно решить. А так - у нее очень много нюансов. Например, при копировании или протягивании значений, при одновременном вводе или очистке данных в нескольких ячейках сразу и т.п.
В этом файле вообще нет стандартных модулей. Одна-единственная процедура обработки события - в модуле второго листа.
По поводу ошибки - не оч.понял вопрос. У Вас же там проверка данных и список... Проверка допустимости значения идет сначала на этом уровне... Но дополнил немного код...
Вам показан ПРИНЦИП работы - что поставленную задачу в принципе можно решить. А так - у нее очень много нюансов. Например, при копировании или протягивании значений, при одновременном вводе или очистке данных в нескольких ячейках сразу и т.п.ikki
ikki, отлично, большое спасибо это то что нужно, оттягивать значение вниз не будем, главное чтоб выборка со списка была на автомате))). Только один вопрос - Лист1!R2C1:R25C1,MATCH(Лист2!RC2,Лист1!R2C2:R25C2,0) - Координаты ячеек и диапазоны прописаны здесь?
ikki, отлично, большое спасибо это то что нужно, оттягивать значение вниз не будем, главное чтоб выборка со списка была на автомате))). Только один вопрос - Лист1!R2C1:R25C1,MATCH(Лист2!RC2,Лист1!R2C2:R25C2,0) - Координаты ячеек и диапазоны прописаны здесь?enchanter
Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 11:01
это формула со стилем ссылок R1C1 (так макрорекодер записал, переписывать в А1 не стал) можно иначе... может, так будет более очевидно - что и где менять...
это формула со стилем ссылок R1C1 (так макрорекодер записал, переписывать в А1 не стал) можно иначе... может, так будет более очевидно - что и где менять...ikki
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки If Not Intersect(Target, Range("A2:B100")) Is Nothing Then Dim FoundName As Range Dim FoundKod As Range If Target.Column = 1 Then Application.EnableEvents = False With Sheets("Лист1") Set FoundName = .Columns(1).Find(Target, , xlValues, xlWhole) If Not FoundName Is Nothing Then Target.Offset(, 1) = .Cells(FoundName.Row, 2) End If End With Application.EnableEvents = True Else Application.EnableEvents = False With Sheets("Лист1") Set FoundKod = .Columns(2).Find(Target, , xlValues, xlWhole) If Not FoundKod Is Nothing Then Target.Offset(, -1) = .Cells(FoundKod.Row, 1) End If End With Application.EnableEvents = True End If End If End Sub
[/vba]
В модуль Листа2 [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки If Not Intersect(Target, Range("A2:B100")) Is Nothing Then Dim FoundName As Range Dim FoundKod As Range If Target.Column = 1 Then Application.EnableEvents = False With Sheets("Лист1") Set FoundName = .Columns(1).Find(Target, , xlValues, xlWhole) If Not FoundName Is Nothing Then Target.Offset(, 1) = .Cells(FoundName.Row, 2) End If End With Application.EnableEvents = True Else Application.EnableEvents = False With Sheets("Лист1") Set FoundKod = .Columns(2).Find(Target, , xlValues, xlWhole) If Not FoundKod Is Nothing Then Target.Offset(, -1) = .Cells(FoundKod.Row, 1) End If End With Application.EnableEvents = True End If End If End Sub
Можно применить Find, можно Match, можно перебором. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column > 2 Then Exit Sub With Sheets("Лист1") For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row If .Cells(i, 1) = Target Then Cells(Target.Row, 2) = .Cells(i, 2): Exit Sub If .Cells(i, 2) = Target Then Cells(Target.Row, 1) = .Cells(i, 1): Exit Sub Next End With End Sub
[/vba]В модуль листа.
Можно применить Find, можно Match, можно перебором. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column > 2 Then Exit Sub With Sheets("Лист1") For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row If .Cells(i, 1) = Target Then Cells(Target.Row, 2) = .Cells(i, 2): Exit Sub If .Cells(i, 2) = Target Then Cells(Target.Row, 1) = .Cells(i, 1): Exit Sub Next End With End Sub