[算表] EXCEL VBA取代Vlookup 代碼看不太懂

作者: t6370345 (貓咪QQ)   2019-07-07 19:25:35
軟體:office 2016
版本:Excel 2016
原本用vlookup會造成程序跑太慢卡住,參考別人寫的方式
但是無法理解,想上來詢問,請問要如何修改呢?
原本函數是VLOOKUP(P2,標準!B:L,5,FALSE),希望在P:P範圍貼上多個數值會在
B:B的位置去回傳值
重新編寫後變成這樣,但是執行後沒有反應,不知道那邊錯了> <
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xR As Range, xF As Range, xCr, xCf, j%
xCr = Array(-13)
xCf = Array(5)
With Target.Columns(16) '貼入或輸入區的第一欄
If .Column <> 1 Then Exit Sub
For Each xR In .Cells
If .Row = 1 Then GoTo 101
xR(1, 3).Resize(1, 5).ClearContents
If xR = "" Then GoTo 101
Set xF = 標準.[B:L].Find(xR, LookAt:=xlWhole, MatchCase:=False)
If xF Is Nothing Then GoTo 101
For j = 0 To UBound(xCr)
xR(1, xCr(j)) = xF(1, xCf(j)).Value
Next j
101: Next
End With
End Sub
作者: soyoso (我是耀宗)   2019-07-07 19:55:00
不太了解原po對公式VLOOKUP(P2,標準!B:L,5,FALSE)的理解在P:P範圍貼上多個數值會在B:B的位置去回傳值?這公式的意思是以p2的值,搜尋標準!B:L這個範圍內最左欄(也就是b欄),搜尋到後回傳左起第5欄(f欄)的儲存格值且回傳上是b欄第一筆搜尋到公式為這樣理解,和原po實際要回傳的資料上是否一致呢?
作者: t6370345 (貓咪QQ)   2019-07-07 20:06:00
不好意思沒說清楚,公式要跳行P2,下一行就變P3這樣
作者: soyoso (我是耀宗)   2019-07-07 21:01:00
如p2起貼入資料,以序將資料(標準!B:L從b起第5欄的f欄資料)回傳至b2,以內文巨集來改的話1、變數xCr為array(-13),xCf為array(5)2、.column<>1改為p欄欄號16若只有要回傳標準!B:L從b起第5欄資料的話,for j..next也可以不用寫,迴圈內變數xCr(j)和xCf(j)就以常數3、變數Data方面內文巨集內沒看到宣告,也沒指定這方面可自行指定到工作表"標準",以worksheets或sheets
作者: t6370345 (貓咪QQ)   2019-07-07 22:01:00
另外想問,xR(1, 3).Resize(1, 5).ClearContents 這個是什麼意思呢?
作者: soyoso (我是耀宗)   2019-07-07 22:50:00
xR這個儲存格往右2欄,往右2欄的這個儲存格resize(1,5)為調整為1列5欄的範圍,clearcontents則清楚該範圍公式和值保留儲存格格式和條件式格式設定

Links booklink

Contact Us: admin [ a t ] ucptt.com