VLOOKUP函数不是VBA函数,应写成Application.WorksheetFunction.VLookup()或者Application.VLookup()
Application.是引用工作表函数的方法,非VBA函数的工作表函数必须用这种方法,不能直接被VBA引用。
下面是使用案例:
Sub usevlookup()
Cells(1, 2) = Application.VLookup(Cells(1, 1), Worksheets("imei出库日报").Range("A:D"), 4, 0)
aa = Application.VLookup(Cells(2, 1), Worksheets("imei出库日报").Range("A:D"), 4, 0)
'aa = Cells(1, 2)
If Not Application.IsNA(aa) Then
MsgBox aa
Else
MsgBox "not found."
End If
End Sub
if IsError(Application.VLookup(Cells(2, 1), Worksheets("sheet1").Range("A:D"), 4, 0)) then
MsgBox "not found."
Else
MsgBox aa
End If
变换一下:
[B1].Formula = "=vlookup(A1,Sheet2!1:65536,2,FALSE)"
[B1]=application.WorksheetFunction.VLOOKUP([A1],Sheet2.cells,2,FALSE)
如果不止是单元格B1,而是B1:B5,该怎么写?
Sub m() For i = 1 To 5 Cells(i, 2) = Application.WorksheetFunction.VLookup(Cells(i, 1), Sheet2.Cells, 2, False) Next End Sub
如果sheet2中缺少sheet1对应数据,或者sheet1中有一个空的单元格,则运行该宏代码会出错,不能象直接使用Vlookup函数时那样,有不存在的就显示“#N/A”
怎样修改呢?
如果Excel表格里面使用VBA的VLOOKUP函数,那么就显得比较简单了。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '工作表选定区域发生改变时执行
On Error Resume Next 'VBA忽略之后的语句错误
Dim i, j As Integer
Set myDocument1 = ThisWorkbook.Worksheets("Sheet1").Range("A3:I1000")
Set myDocument2 = ThisWorkbook.Worksheets("Sheet2")
For i = 3 To 1000 '循环3-1000次,即:以下自动填充时间到1000行
For j = 2 To 9 '循环2-9次,即:从第2列到第9列
If myDocument2.Cells(i, 1) <> "" Then '如果查找的单元格不为空值,则查找表1的内容填充到表2对应的位置
myDocument2.Cells(i, j) = Application.WorksheetFunction.VLookup(myDocument2.Cells(i, 1), myDocument1, j, [0])
End If
If myDocument2.Cells(i, 1) = "" And myDocument2.Cells(i, j) <> "" Then
myDocument2.Cells(i, j) = "" '如果查找值为空白且查找填充的行不为空白,则显示空白
End If
If myDocument2.Cells(i, 1) <> "" And myDocument2.Cells(i, j) = "" Then
myDocument2.Cells(i, j) = "不存在" '如果查找值不存在,则显示“不存在”
End If
Next
Next
End Sub
在Excel中没有直接提供查找函数,常通过我循环一个一个的对比式查找。对于刚学VBA的新手,还是希望能在VBA中使用VLOOKUP函数。
在VBA中调用工作表函数,可以用下面的格式
Application.工作表函数名(参数....)
如工作表中的公式:
C1
=VLOOKUP(c1,A1:A100,2,0)
在VBA代码中可以这样调用
Range('C1')=Application.Vlookup(Range('c1'),Range('A1:A100'),2,0)
注:在VBA中表格引用要用VBA的表示方式。如C1用Range('c1')表示。
小知识:在VBA中可以使用哪些工作表函数
输入Application.WorksheetFunction再输入“ .”会就出现一个下拉列表,上面显示的都可以在VBA中使用。
Sub zz()
Dim d, wb As Workbook, ar
Set d = CreateObject("Scripting.Dictionary")
Set wb = GetObject(ThisWorkbook.Path & "\Book1.xlsx")
Application.ScreenUpdating = False
ar = wb.Sheets(1).Range("A1").CurrentRegion
wb.Close 0
For i = 2 To UBound(ar)
d(ar(i, 1)) = Array(ar(i, 2), ar(i, 3))
Next
For i = 2 To [b65536].End(3).Row
Cells(i, 3).Resize(1, 2) = d(Cells(i, 2).Value)
Next
Application.ScreenUpdating = True
End Sub
VBA实现VLOOKUP函数
以后遇到类似的任务可以直接把相应的数据复制粘贴到表格1和表格2,运行一下就OK了。
以下是截图代码
Sub 引用()
Dim i%, r%
Dim arr1, arr2
arr1 = Sheets("sheet1").[a1].CurrentRegion
arr2 = Sheets("sheet1").[f1].CurrentRegion
r = 1
For r = 1 To UBound(arr2)
For i = 1 To UBound(arr1)
If arr2(r, 1) = arr1(i, 1) Then
arr2(r, 2) = arr1(i, 2)
Exit For
End If
Next
Next
Sheets("sheet1").[f1].Resize(UBound(arr2), 2) = arr2
End Sub
上面要注意表2中G1单元格不能留空,如果有什么运行问题请留言。
联系客服