Добрый вечер профи. На форуме нашел подобную тему - приспособил макрос для своего файла.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Range("С2:С92").FormulaR1C1 = "=VLOOKUP(RC[-1],Лист2!C[-2]:C[-1],2,FALSE)"
End Sub
Вношу данные в B8 Лист1 - нет результата в С8 Лист1 - выдает ошибку на ряд кода Range("С2:С92" ... Эксперименты не дали результата (поместил макрос сначала в "Лист 1", потом "Ета книга" - не работает Помогите пожалуйста исправить мою ошибку в коде макроса. Заранее огромное спасибо.
Спасибо,EducatedFool К сожалению результат появился для всего диапазона С2:С92 Можно как-то законектить так, чтобы результат был только напротив ячейки В, куда вносится цифра для поиска? Цыфра в B8 = результат только в С8, Цыфра в B9 = результат только в С9 и так далее?
Мне, например, не понятно, что Вы хотели получить в итоге. Если заменить в "С2:С92" С русскую на С английскую - код сработает при условии размещения его в "Лист1" (или "Лист2"), а не в "Эта книга". А зачем Макрос1 - тоже не понятно.
Михаил Лебедев Макрос1 не нужен - он уже удален Переместил макрос в "Лист1" Заменил на С английскую. Проблема: К сожалению результат появился для всего диапазона С2:С92 Можно как-то законектить так, чтобы результат был только напротив ячейки В, куда вносится цифра для поиска? Цифра в B8 = результат только в С8, Цифра в B9 = результат только в С9 и так далее?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then
Target.Offset(0, 1).FormulaR1C1 = "=VLOOKUP(RC[-1],Лист2!C[-2]:C[-1],2,FALSE)"
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Target.Offset(, 1).FormulaR1C1 = "=VLOOKUP(RC[-1],Лист2!C[-2]:C[-1],2,FALSE)"
End If
End Sub
Спасибо Юрий М и Kuzmich Все работает отлично. Не сочтите за наглость: Вы говорили, что можно обойтись без формулы(ВПР), если уже есть макрос . Насколько это трудно реализовать?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then
With Sheets("Лист2")
Set Rng = .Columns(1).Find(what:=Target.Value, LookIn:=xlValues, lookAt:=xlWhole)
If Not Rng Is Nothing Then
Target.Offset(0, 1) = Rng.Offset(0, 1)
End If
End With
End If
End Sub
на всякий случай: приведенный код будет работать только с видимыми строками второго листа. значения в скрытых строках (вручную или фильтром) - не найдутся. ВПР работает иначе.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Всем спасибо огромное за помощь. Испытал сегодня данный макрос на большом файле. Последнее 100% просьба о помощи: Как в макросе от Юрий М прописать путь поиска. В макросе, что сейчас, это "Лист 2" в том же файле. А нужно "Лист 2" в C:\Documents and Settings\User0001295\Freemake\DSA.xls Файл(Файл.xls), в котором есть макрос и в котором выводится результат поиска лежит в D:\QWE\Файл.xls Насколько я понял нужно изменить путь в коде здесь:
Код
With Sheets("Лист2")
но у меня подстановки пути не привели к результату. Помогите пож в последний раз.
Просмотрел подобные темы. Нужно наверное использовать метод Set book . Прикрутил к коду Юрия М:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then
With Set book = GetObject("C:\Documents and Settings\User0001295\Freemake\DSA.xls", "Excel.Sheets("Лист2"))
Set Rng = .Columns(1).Find(what:=Target.Value, LookIn:=xlValues, lookAt:=xlWhole)
If Not Rng Is Nothing Then
Target.Offset(0, 1) = Rng.Offset(0, 1)
End If
End With
End If
End Sub
В данном случае я что-то явно исказил - снова ошибка при работе кода. Помогите пожалуйста исправить ошибки.
Изменил. Ругается на End With. Убрал End With -ругается на Private Sub Worksheet_Change(ByVal Target As Range)
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then
Set book =Workbooks.Open(Filename:="C:\Documents and Settings\User0001295\Freemake\DSA.xls"
Set Rng = .Columns(1).Find(what:=Target.Value, LookIn:=xlValues, lookAt:=xlWhole)
If Not Rng Is Nothing Then
Target.Offset(0, 1) = Rng.Offset(0, 1)
End If
End With
End If
End Sub
И где в етом коде прописать Sheets("Лист2" файла DSA.xls? Спасибо заранее.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Not Intersect(Target, Range("B2:B10")) Is Nothing Then
Set book =Workbooks.Open(Filename:="C:\Documents and Settings\User0001295\Freemake\DSA.xls"
With book.Sheets("Лист2")
Set Rng = .Columns(1).Find(what:=Target.Value, LookIn:=xlValues, lookAt:=xlWhole)
If Not Rng Is Nothing Then
Target.Offset(0, 1) = Rng.Offset(0, 1)
End If
End With
End If
End Sub
Джонни_2013, тут есть неудобство: при КАЖДОМ изменении в столбце В будет открываться/закрываться вторая книга. Может быть есть смысл данные держать в этой же (первой) книге?