Страницы: 1
RSS
Формула VLOOKUP через VBA с искомой переменной, вместо фииксированной ячейки
 
Здравствуйсте, друзья!

Помогите разобраться почему код выдает ошибку?
Код
Sub EXAMPLE ()
Dim rn As Range

Application.FindFormat.MergeCells = True
Set rn = Cells.Find("", After:=ActiveCell, SearchFormat:=True)
rn.Select

Sheets("MAIN").Cells(5, 5).Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(" & rn.Value & ",Sheet1!C[1]:C[2],2,0)"
End Sub

Ошибку выдает на последней строчке, не хочет вводить такую формулу в ячейку, ругается. (1004 ошибка). Не могу понять почему.

Суть проста: есть переменная, хочу чтобы VLookup делал поиск не по фиксированной ячейке, а по переменной объявленной в коде. Переменная объявлена как Range, как видно из кода выше это объединенная ячейка на листе. Хочу чтобы VlookUp мне искал содержимое объединенной ячейки в фиксированном месте.
Сразу несколько оговорок. Объединенная ячейка всегда будет в разных местах по ходу кода, поэтому и надо поиск делать с помощью переменной, а не фиксированно. Пробовал также ActiveCell = Selection.Application.WorksheetFunction.VLookup(rn, Sheet1.Range("B100:C100"), 2, False), тоже не работает. Почему через формулу не работает тоже не пойму, вроде Амперсанды выставил, вроде указал чтобы искал значение, а не саму переменную, так как она объявленная не как String, а как Range. Видел примеры подобного кода, все работало.

Заранее всем спасибо
 
В переменной скорее всего текст. Надо его в кавычки. (,""" & m.value & """,
По вопросам из тем форума, личку не читаю.
 
Paul Zealand, Можно вопрос, для чего у вас в коде это эти строки ?
Код
rn.Select
Sheets("MAIN").Cells(5, 5).Select
Изменено: Александр П. - 08.06.2018 08:30:43
 
БМВ, верно, там текст. Когда в кавычки я его ввожу, то он формулу в ячейку то вводит, но вместо нужного текста он ищет " & rn.Value & " вот это. А сама ячейка соответственно вместо искомого значения выводит - #N/A.
 
Paul Zealand, Перепишите так
Код
Sheets("MAIN").Cells(5, 5).FormulaR1C1 = "=VLOOKUP(""" & rn.Value & """,Sheet1!C[1]:C[2],2,0)"
Изменено: Александр П. - 08.06.2018 08:37:31
 
Александр П., на самом деле эти строки в коде не нужны, я знаю. Я их в примере оставил, чтобы показать факт того, что Переменная объявленна корректно, что ВБА ее находит, и как следствие ошибка формулы не связана с кривой Переменной.  
 
Александр П., переписал по Вашему совету, все заработало. Дело было в третьих ковычках. Нужно было их добавить. Спасибо большое.
 
Paul Zealand Можно, что бы не путаться делать так
Код
Sheets("MAIN").Cells(5, 5).FormulaR1C1 = "=VLOOKUP(" & Chr(34) & rn.Value & Chr(34) & ",Sheet1!C[1]:C[2],2,0)"
Изменено: Александр П. - 08.06.2018 08:52:17
 
Цитата
Paul Zealand написал: Дело было в третьих ковычках
Цитата
БМВ написал: Надо его в ковычки. (,""" & m.value & """,
Цитата
Александр П.написал: Можно, что бы не путаться делать так
просто надо один , два раза сделать и запомнить, как экранируется этот символ.
Изменено: БМВ - 08.06.2018 13:55:16
По вопросам из тем форума, личку не читаю.
 
Александр П., спасибо за отличный совет. Попробую.
 
БМВ, А мне вот все равно проще применить chr(), чем рисовать """", чего то в них путаюсь...  видимо, дело в том, что ооооочень редко приходиться применять.  :oops:  
Изменено: Александр П. - 08.06.2018 13:58:08
 
Добрый день.

У меня стоит такая же задача, но поиск я хочу производить по адресу ячейки которую указал пользователь, чтобы можно было протягивать полученную формулу в разных книгах на разные диапазоны.
Итак, выбираю ячейку с искомым значением
Получаю ее адрес
Вставляю этот адрес в формулу VLOOKUP. - на этом этапе вместо адреса ячейки в формуле появляется адрес в одинарных кавычках.
=ВПР('A1',Source!A:B,2,0)
Если добавляю еще двойных кавычек в код, как советовали выше, то получается
=ВПР("A1",Source!A:B,2,0)

Ниже код и файл образец в приложении.
Код
Set myCell = Application.InputBox("Select a Cell", Type:=8)
CellAddress = myCell.Address(0, 0)
ActiveCell.Formula = "=VLOOKUP(" & CellAddress & ",Source!C[-1]:C,2,0)"
 
Вы это имели в виду ?

Код
Option Explicit

Sub V_LOOK_UP()
    Const rngadrs = "$A$1:$B$34"
    Const shnme = "Source"
    
    Dim adrs As String, frmla As String
    
    adrs = Application.InputBox("Select a Cell", Type:=8).Address(0, 0)
    frmla = "=VLOOKUP(" & "$" & adrs & "," & shnme & "!" & rngadrs & ",2,0)"
    
    Range(adrs).Offset(0, 1).Formula = frmla
End Sub
 
ocet p,
В общем-то все решилось куда проще. Оказалось, что достаточно заменить диапазон поиска на абсолютные значения.
Вместо
Код
C[-1]:C
Код
$A$1:$B$34
Код
Set myCell = Application.InputBox("Select a Cell", Type:=8)
CellAddress = myCell.Address(0, 0)
ActiveCell.Formula = "=VLOOKUP(" & CellAddress & ",Source!$A$1:$B$34,2,0)"
Страницы: 1
Наверх