作者t6370345 (猫咪QQ)
看板Office
标题[算表] EXCEL VBA取代Vlookup 代码看不太懂
时间Sun Jul 7 19:25:35 2019
软体: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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.52.190.179 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1562498737.A.B34.html
1F:→ soyoso: 不太了解原po对公式VLOOKUP(P2,标准!B:L,5,FALSE)的理解 07/07 19:55
2F:→ soyoso: 在P:P范围贴上多个数值会在B:B的位置去回传值? 07/07 19:55
3F:→ soyoso: 这公式的意思是以p2的值,搜寻标准!B:L这个范围内最左栏( 07/07 19:56
4F:→ soyoso: 也就是b栏),搜寻到後回传左起第5栏(f栏)的储存格值 07/07 19:58
5F:→ soyoso: 且回传上是b栏第一笔搜寻到 07/07 20:00
6F:→ soyoso: 公式为这样理解,和原po实际要回传的资料上是否一致呢? 07/07 20:02
7F:→ t6370345: 不好意思没说清楚,公式要跳行P2,下一行就变P3这样 07/07 20:06
8F:→ soyoso: 如p2起贴入资料,以序将资料(标准!B:L从b起第5栏的f栏资料 07/07 21:01
9F:→ soyoso: )回传至b2,以内文巨集来改的话 07/07 21:01
10F:→ soyoso: 1、变数xCr为array(-13),xCf为array(5) 07/07 21:01
11F:→ soyoso: 2、.column<>1改为p栏栏号16 07/07 21:01
12F:→ soyoso: 若只有要回传标准!B:L从b起第5栏资料的话,for j..next也 07/07 21:02
13F:→ soyoso: 可以不用写,回圈内变数xCr(j)和xCf(j)就以常数 07/07 21:04
14F:→ soyoso: 3、变数Data方面内文巨集内没看到宣告,也没指定 07/07 21:16
15F:→ soyoso: 这方面可自行指定到工作表"标准",以worksheets或 07/07 21:17
16F:→ soyoso: sheets 07/07 21:17
※ 编辑: t6370345 (39.10.140.253 台湾), 07/07/2019 21:57:59
17F:→ t6370345: 另外想问,xR(1, 3).Resize(1, 5).ClearContents 这个是 07/07 22:01
18F:→ t6370345: 什麽意思呢? 07/07 22:01
19F:→ soyoso: xR这个储存格往右2栏,往右2栏的这个储存格resize(1,5)为 07/07 22:50
20F:→ soyoso: 调整为1列5栏的范围,clearcontents则清楚该范围公式和值 07/07 22:51
21F:→ soyoso: 保留储存格格式和条件式格式设定 07/07 22:52