[算表] 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