VLOOKUP函數(shù)不是VBA函數(shù),,應(yīng)寫(xiě)成Application.WorksheetFunction.VLookup()或者Application.VLookup() Application.是引用工作表函數(shù)的方法,,非VBA函數(shù)的工作表函數(shù)必須用這種方法,不能直接被VBA引用,。 下面是使用案例: Sub usevlookup() Cells(1, 2) = Application.VLookup(Cells(1, 1), Worksheets("imei出庫(kù)日?qǐng)?bào)").Range("A:D"), 4, 0) VBA中使用Application.VLookup返回來(lái)沒(méi)找到結(jié)果時(shí),,彈出運(yùn)行時(shí)錯(cuò)誤"1004":應(yīng)用程序定義或?qū)ο蠖x錯(cuò)誤 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 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,,該怎么寫(xiě)? 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對(duì)應(yīng)數(shù)據(jù),,或者sheet1中有一個(gè)空的單元格,,則運(yùn)行該宏代碼會(huì)出錯(cuò),不能象直接使用Vlookup函數(shù)時(shí)那樣,,有不存在的就顯示“#N/A” 怎樣修改呢,? 如果Excel表格里面使用VBA的VLOOKUP函數(shù),那么就顯得比較簡(jiǎn)單了,。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '工作表選定區(qū)域發(fā)生改變時(shí)執(zhí)行 On Error Resume Next 'VBA忽略之后的語(yǔ)句錯(cuò)誤 Dim i, j As Integer Set myDocument1 = ThisWorkbook.Worksheets("Sheet1").Range("A3:I1000") Set myDocument2 = ThisWorkbook.Worksheets("Sheet2") For i = 3 To 1000 '循環(huán)3-1000次,,即:以下自動(dòng)填充時(shí)間到1000行 For j = 2 To 9 '循環(huán)2-9次,即:從第2列到第9列 If myDocument2.Cells(i, 1) <> "" Then '如果查找的單元格不為空值,,則查找表1的內(nèi)容填充到表2對(duì)應(yīng)的位置 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中沒(méi)有直接提供查找函數(shù),,常通過(guò)我循環(huán)一個(gè)一個(gè)的對(duì)比式查找,。對(duì)于剛學(xué)VBA的新手,還是希望能在VBA中使用VLOOKUP函數(shù),。 在VBA中調(diào)用工作表函數(shù),,可以用下面的格式 Application.工作表函數(shù)名(參數(shù)....) 如工作表中的公式: C1 =VLOOKUP(c1,A1:A100,2,0) 在VBA代碼中可以這樣調(diào)用 Range('C1')=Application.Vlookup(Range('c1'),Range('A1:A100'),2,0) 注:在VBA中表格引用要用VBA的表示方式,。如C1用Range('c1')表示。 小知識(shí):在VBA中可以使用哪些工作表函數(shù) 輸入Application.WorksheetFunction再輸入“ .”會(huì)就出現(xiàn)一個(gè)下拉列表,,上面顯示的都可以在VBA中使用,。 Sub zz() VBA實(shí)現(xiàn)VLOOKUP函數(shù) 以后遇到類(lèi)似的任務(wù)可以直接把相應(yīng)的數(shù)據(jù)復(fù)制粘貼到表格1和表格2,運(yùn)行一下就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單元格不能留空,,如果有什么運(yùn)行問(wèn)題請(qǐng)留言。 |
|