作者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/m.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