2016-10-04 5 views
1

Привет, я новичок в Excel. Я хотел создать макрос для vlookup, чтобы я мог обращаться ко многим ячейкам, но он не работает.excel macro vba on vlookup formula

Sub haha() 

Dim wb As Workbook 
Dim ws, ws1 As Worksheet 
Set wb = ActiveWorkbook 
Set ws = ActiveWorkbook.Sheets(1) 
Set ws1 = ActiveWorkbook.Sheets(2) 
wb.Activate 

ws1.Select 

Range("E1").Formula = "=+VLOOKUP(" & ws1.Range("C6") & "," & ws.Range("c7:d10") & ",2,FALSE)" 

End sub 

Я хотел посмотреть значение в моем текущем листе на другой лист, чтобы вернуть уникальное значение. Пожалуйста помоги! :)

+1

положите '.Address' после двух диапазонов в vlookup. –

+0

Отмечено с благодарностью! – koky

ответ

1

Просто замените эти 3 строки:

wb.Activate 
ws1.Select 
Range("E1").Formula = "=+VLOOKUP(" & ws1.Range("C6") & "," & ws.Range("c7:d10") & ",2,FALSE)" 

с этим:

ws1.Range("E1").Formula = "=VLOOKUP(C6," & ws.Range("C7:D10").Address(External:=1) & ",2,FALSE)" 

В ws1.Range("C6") части sheet и address не нужны, в этом случае, как клетка в том же листе, где формула идет так, ws1.Range("C6") всегда будет возвращать C6.

Что касается части ws.Range("c7:d10"), вам нужна «внешняя ссылка», потому что она относится к другому листу. Хотя ссылка ExternalRange.Address Property включает в себя имя файла, она отбрасывается, поскольку формула находится в той же книге.

+0

Привет, EEM, эта альтернатива тоже хорошо работает! 1 У меня есть много, чтобы узнать от вас, ребята! :) Благодаря! – koky

+0

Обратите внимание, что если вы используете '.Address (External: = 1)' не нужно добавлять часть '.Worksheet.Name', поскольку функция адреса будет включать ее. – EEM

+0

Отмечено с благодарностью! Просто быстрый вопрос. Я изучил макро и vba из учебника. Но всякий раз, когда я применяю в реальной жизни, я столкнусь с некоторыми проблемами. Как мы улучшаем наши навыки макросов, чтобы мы могли помогать другим в этом форуме? Любые веб-сайты, видео или книги, рекомендуемые. – koky

2

Проверьте это.

Sub haha() 

Dim wb As Workbook 
Dim ws As Worksheet, ws1 As Worksheet 
Dim rng As Range 
Set wb = ActiveWorkbook 
Set ws = ActiveWorkbook.Sheets(1) 
Set ws1 = ActiveWorkbook.Sheets(2) 
wb.Activate 

Set rng = ws.Range("c7:d10") 
ws1.Range("E1").Formula = "=VLOOKUP(" & ws1.Range("C6").Address & "," & rng.Worksheet.Name & "!" & rng.Address & ",2,FALSE)" 

End Sub 
+0

Привет, Оба, отлично! Просто запрос - почему мы используем .Worksheet.Name и .Address в vlookup? Большое спасибо! :) – koky

+0

Потому что в lookuparray мы должны указать имя листа, из которого оно принадлежит. –

+0

Спасибо большое! Очень ценю помощь! – koky