打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel 如何在VBA中使用VLOOKUP函数?

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

VBA中使用Application.VLookup返回来没找到结果时,弹出运行时错误"1004":应用程序定义或对象定义错误 20

代码如下:
aa = Application.VLookup(Cells(2, 1), Worksheets("sheet1").Range("A:D"), 4, 0)
If Not Application.IsNA(aa) Then
MsgBox aa
Else
MsgBox "not found."
End If

if  IsError(Application.VLookup(Cells(2, 1), Worksheets("sheet1").Range("A:D"), 4, 0)) then
MsgBox "not found."

Else
MsgBox aa
End If




如何在VBA中使用VLOOKUP函数?例如:B1=VLOOKUP(A1,Sheet2!1:65536,2,FALSE)。

Sub test() [B1].Formula = "=VLOOKUP(1,A2:C10,2)" End Sub
可我是引用的其他表呀!

B1=application.VLOOKUP(A1,Sheet2!1:65536,2,FALSE)。

变换一下:

[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单元格不能留空,如果有什么运行问题请留言。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
可以生成数组的函数,数组的处理
Vba菜鸟教程[通俗易懂]
VLOOKUP函数在VBA中的使用
EXCEL用VBA代替VLOOKUP函数,速度更快更通用
完全手册Excel VBA典型实例大全:通过368个例子掌握
自学资料(Excel VBA)[收集整理15]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服