powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
14 сообщений из 14, страница 1 из 1
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40076764
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
Подскажите, как используя VBA можно передать в переменную значение, полученное например от функции ВПР... ?

Можно записать значение от функции ВПР в ячейку, как в п.1, но в ячейке отражается конечно и формула ВПР...
1) Cells(5, 5).Formula = "=VLOOKUP($D7,'C:\[Bill.xlsx]Phone'!$A$2:$D$60,4,0)"

Попытался записать в переменную, используя п.2, но в переменную также переносится и формула расчета.
2) Rezult = ["=VLOOKUP($D7,'C:\[bill.xlsx]Phone'!$A$2:$D$60,4,0)"]

Что и видно, когда используешь п.3
3) Cells(5, 10).Value = Rezult

А вот попробовал еще использовать WorksheetFunction.VLOOKUP, но не могу с синтаксисом разобраться.
4) Rezult = WorksheetFunction.VLOOKUP($D7,’C:\[bill.xlsx]Phone'!$A$2:$D$60,4,0) не работает

Кто поможет разобраться , как передать через VBA значение ВПР в переменную Rezult ?
И что неправильно с синтаксисом в п.4 ?

Спасибо!
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40076790
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR
не могу с синтаксисом разобраться
потому что использовать надо синтаксис VBA, а не формул листа:
Код: vbnet
1.
Rezult = WorksheetFunction.VLOOKUP(Range("D7"),Workbooks("bill.xlsx").Sheets("Phone").Range("A2:D60"),4,0)
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40076794
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, Добрый день! Да Вы правы.
Сейчас все работает правильно,
Спасибо большое!
Всем хорошего дня!
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079115
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, добрый день!
Подскажите пожалуйста, как можно в VBA использовать переменные в функции Range ?

Например, выражение 1 работает корректно. 1). Range(Cells(1, 10), Cells(1, 10)).Value = 300
Вместо Cell (1,10) хотел бы использовать Cell (I,K) ....

Пытаюсь по аналогии заменить Range("$A2:$D$61") на Range(Cells(2, 1), Cells(61, 4)) - вылетает ошибка 1004

Применяю совместно с LOOKUP. Выражение 2 работает корректно, выражение 3 с ошибкой 1004.

2). Rezult3 = WorksheetFunction.VLookup(Range(Cells(7, 4), Cells(7, 4)), Workbooks("bill.xlsx").Sheets("Phone").Range("$A2:$D$61"), 4, 0)

3). Rezult3 = WorksheetFunction.VLookup(Range(Cells(7, 4), Cells(7, 4)), Workbooks("bill.xlsx").Sheets("Phone").Range(Cells(2, 1), Cells(61, 4)), 4, 0)

При этом доступ к файлу и листу есть.
Workbooks.Open "D:\Test\Bill.xlsx"
ActiveSheet.Name = "Phone"

Может есть какие идеи?
Спасибо!
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079128
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR
выражение 3 с ошибкой 1004.
Отож... Cells(2, 1), Cells(61, 4) берутся с активного листа, а не с Workbooks("bill.xlsx").Sheets("Phone") .

Код: vbnet
1.
2.
3.
Set ah = ActiveSheet
Set sh = Workbooks("bill.xlsx").Sheets("Phone")
Rezult3 = WorksheetFunction.VLookup(Range(ah.Cells(7, 4), ah.Cells(7, 4)), sh.Range(sh.Cells(2, 1), sh.Cells(61, 4)), 4, 0)
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079161
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, попробовал, вы все логично написали, но выдает ту же 1004 ошибку, скрин прилагаю в файле.

может дело в том, что в Lookup работает с двумя листами, которые не находятся в одной книге?
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079209
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR
может дело в том, что в Lookup работает с двумя листами, которые не находятся в одной книге?
Тогда все адрес должны быть полными и включать и имя книги, и имя листа.
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079270
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, доброе утро! да все логично, спасибо, в целом подход понятен и основная часть работает.
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079809
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! В продолжении темы, появился вопрос с обработкой ошибки, когда VLookup не находит данные.
Не могу перехватить ошибку, если используется WorksheetFunction.VLookup
Не получается использовать:
Код: vbnet
1.
2.
  On Error Resume Next  
  Rezult_Logic = IsError(WorksheetFunction.VLookup(Range(ah.Cells(L, H1), ah.Cells(L, H1)), sh.Range(sh.Cells(N1, P1), sh.Cells(N2, P2)), H, 0))  



Rezult_Logic всегда False, даже на строках, где данные не найдены.

Если используется Application.VLookup - ошибка перехватывается.
Тогда строчка выглядит ка книже и все работает.
Код: vbnet
1.
2.
On Error Resume Next  
Rezult3 = Application.VLookup(Range(ah.Cells(L, H1), ah.Cells(L, H1)), sh.Range(sh.Cells(N1, P1), sh.Cells(N2, P2)), H, 0)



Но хотелось бы использовать, если надо и функционал WorksheetFunction.VLookup и научиться перехватывать такие ошибки.
Кто поможет? Спасибо!
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079814
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR,

Код: vbnet
1.
2.
3.
4.
5.
 On Error Resume Next
 Debug.Print Application.WorksheetFunction.VLookup(1, Range("A1:A5"), 1, False)
 If Err Then
    MsgBox "Error"
 End If
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40079889
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,
спасибо! проверил, работает.
только если в цикле выполнять, то все корректно отрабатывает до первой ошибки, далее ошибка перехватывается и обрабатывается, а потом странность - ошибка не сбрасывается и выражение всегда становится ошибочным, хотя данные точно есть.
Почему?

For i=1 to 100
On Error Resume Next
Debug.Print Application.WorksheetFunction.VLookup(Range(ah.Cells(L, H1), ah.Cells(L, H1)), sh.Range(sh.Cells(N1, P1), sh.Cells(N2,
P2)), H, 0)
If Err Then
MsgBox "Error"
End If
On Error GOTO 0
Next I


Вышел из положения тем, что включил в тело цикла - On Error Resume Next и в конце цикла добавил On Error GOTO 0 для сброса контроля ошибок, но это "костыль".
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40080036
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri KR
Почему?
Вы не сбрасываете значение ошибки, а надо бы, чтобы она не висела до новой ошибки или до конца кода:
Код: vbnet
1.
2.
3.
4.
If Err Then
MsgBox "Error"
err.clear 'сбрасываем ошибку
End If
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40080037
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist
Yuri KR
Почему?
Вы не сбрасываете значение ошибки, а надо бы, чтобы она не висела до новой ошибки или до конца кода:
Код: vbnet
1.
2.
3.
4.
If Err Then
MsgBox "Error"
err.clear 'сбрасываем ошибку
End If


Кстати, если записать так:
Код: vbnet
1.
2.
Debug.Print Application.VLookup(Range(ah.Cells(L, H1), ah.Cells(L, H1)), sh.Range(sh.Cells(N1, P1), sh.Cells(N2,
P2)), H, 0)


то сообщение об ошибке появляется не будет, но ошибка будет генерироваться. Полезно, если не хочется использовать On Error Resume Next.
...
Рейтинг: 0 / 0
Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
    #40080064
Yuri KR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, спасибо, со сбросом ошибки все заработало как надо!

Вообще получается, что использование VLookup для имеет свои нюансы, если нет данных...
хочу попробовать использовать Range.Find, или INDEX с MATCH.
Но там скорее всего выплывут свои нюансы :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как используя VBA можно передать в переменную значение, полученное от VLOOKUP?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]