Страницы: 1
RSS
Протянуть макросом ВПР и вывести результат поиска
 
Добрый вечер профи.
На форуме нашел подобную тему - приспособил макрос для своего файла.
Код
1
2
3
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", потом "Ета книга" ;)  - не работает
Помогите пожалуйста исправить мою ошибку в коде макроса.
Заранее огромное спасибо.
Изменено: Джонни_2013 - 28.09.2013 22:19:13
 
А всё потому, что в "С2:С92" буквы С - русские, а не латинские...
 
Спасибо,EducatedFool
К сожалению результат появился для всего диапазона С2:С92 :(
Можно как-то законектить так, чтобы результат был только напротив ячейки В, куда вносится цифра для поиска?
Цыфра в B8 = результат только в С8,
Цыфра в B9 = результат только в С9 и так далее?
 
Мне, например, не понятно, что Вы хотели получить в итоге.
Если заменить в "С2:С92" С русскую на С английскую - код сработает при условии размещения его в "Лист1" (или "Лист2"), а не в "Эта книга".
А зачем Макрос1 - тоже не понятно.
 
Михаил Лебедев
Макрос1 не нужен - он уже удален
Переместил макрос в "Лист1"
Заменил на С английскую.
Проблема:
К сожалению результат появился для всего диапазона С2:С92  :(  
Можно как-то законектить так, чтобы результат был только напротив ячейки В, куда вносится цифра для поиска?
Цифра в B8 = результат только в С8,
Цифра в B9 = результат только в С9 и так далее?

ЦыфраЦифра
Изменено: Джонни_2013 - 28.09.2013 23:35:27
 
Используйте Target, а не Range. А диапазон используйте для указаний контролируемых ячеек.
 
Спасибо.
Переделал, но увы... не работает

Код
1
2
3
Private Sub Worksheet_Change(ByVal Target As Range)
Target("С8").FormulaR1C1 = "=VLOOKUP(RC[-1],Лист2!C[-2]:C[-1],2,FALSE)"
End Sub
 
Код
1
2
3
4
5
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
 
Только лучше не формулу, раз у нас уже есть макрос, а искать на втором листе и подставлять сразу значение.
 
Спасибо. То, что надо.
 
Код
1
2
3
4
5
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
Все работает отлично.
Не сочтите за наглость: Вы говорили, что можно обойтись без формулы(ВПР), если уже есть макрос .
Насколько это трудно реализовать?
 
Код
1
2
3
4
5
6
7
8
9
10
11
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
Насколько я понял нужно изменить путь в коде здесь:
Код
1
With Sheets("Лист2")
но у меня подстановки пути не привели к результату.
Помогите пож в последний раз.
 
Просмотрел подобные темы.
Нужно наверное использовать метод Set book .
Прикрутил к коду Юрия М:
Код
1
2
3
4
5
6
7
8
9
10
11
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


В данном случае я что-то явно исказил - снова ошибка при работе кода.
Помогите пожалуйста исправить ошибки.
Изменено: Джонни_2013 - 29.09.2013 17:47:48
 
Сначала нужно открыть нужную книгу, а уже затем обращаться к её листу. И вот КТО мешал Вам сразу сказать, что лист будет в другой книге?
 
Set book =Workbooks.Open(Filename:="C:\Documents and Settings\User0001295\Freemake\DSA.xls"
 
Изменил.
Ругается на End With. Убрал End With -ругается на Private Sub Worksheet_Change(ByVal Target As Range)
Код
1
2
3
4
5
6
7
8
9
10
11
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?
Спасибо заранее.
Изменено: Джонни_2013 - 29.09.2013 18:09:00
 
Код
1
2
3
4
5
6
7
8
9
10
11
12
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

Не забудьте в конце закрыть DSA.xls
 
Kuzmich Спасибо огромное.
 
Джонни_2013, тут есть неудобство: при КАЖДОМ изменении в столбце В будет открываться/закрываться вторая книга. Может быть есть смысл данные держать в этой же (первой) книге?
Страницы: 1
Читают тему
Наверх
Loading...