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

看板Office作者 (貓咪QQ)時間6年前 (2019/07/07 19:25), 6年前編輯推噓0(0021)
留言21則, 2人參與, 6年前最新討論串1/1
軟體: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://www.ptt.cc/bbs/Office/M.1562498737.A.B34.html

07/07 19:55, 6年前 , 1F
不太了解原po對公式VLOOKUP(P2,標準!B:L,5,FALSE)的理解
07/07 19:55, 1F

07/07 19:55, 6年前 , 2F
在P:P範圍貼上多個數值會在B:B的位置去回傳值?
07/07 19:55, 2F

07/07 19:56, 6年前 , 3F
這公式的意思是以p2的值,搜尋標準!B:L這個範圍內最左欄(
07/07 19:56, 3F

07/07 19:58, 6年前 , 4F
也就是b欄),搜尋到後回傳左起第5欄(f欄)的儲存格值
07/07 19:58, 4F

07/07 20:00, 6年前 , 5F
且回傳上是b欄第一筆搜尋到
07/07 20:00, 5F

07/07 20:02, 6年前 , 6F
公式為這樣理解,和原po實際要回傳的資料上是否一致呢?
07/07 20:02, 6F

07/07 20:06, 6年前 , 7F
不好意思沒說清楚,公式要跳行P2,下一行就變P3這樣
07/07 20:06, 7F

07/07 21:01, 6年前 , 8F
如p2起貼入資料,以序將資料(標準!B:L從b起第5欄的f欄資料
07/07 21:01, 8F

07/07 21:01, 6年前 , 9F
)回傳至b2,以內文巨集來改的話
07/07 21:01, 9F

07/07 21:01, 6年前 , 10F
1、變數xCr為array(-13),xCf為array(5)
07/07 21:01, 10F

07/07 21:01, 6年前 , 11F
2、.column<>1改為p欄欄號16
07/07 21:01, 11F

07/07 21:02, 6年前 , 12F
若只有要回傳標準!B:L從b起第5欄資料的話,for j..next也
07/07 21:02, 12F

07/07 21:04, 6年前 , 13F
可以不用寫,迴圈內變數xCr(j)和xCf(j)就以常數
07/07 21:04, 13F

07/07 21:16, 6年前 , 14F
3、變數Data方面內文巨集內沒看到宣告,也沒指定
07/07 21:16, 14F

07/07 21:17, 6年前 , 15F
這方面可自行指定到工作表"標準",以worksheets或
07/07 21:17, 15F

07/07 21:17, 6年前 , 16F
sheets
07/07 21:17, 16F
※ 編輯: t6370345 (39.10.140.253 臺灣), 07/07/2019 21:57:59

07/07 22:01, 6年前 , 17F
另外想問,xR(1, 3).Resize(1, 5).ClearContents 這個是
07/07 22:01, 17F

07/07 22:01, 6年前 , 18F
什麼意思呢?
07/07 22:01, 18F

07/07 22:50, 6年前 , 19F
xR這個儲存格往右2欄,往右2欄的這個儲存格resize(1,5)為
07/07 22:50, 19F

07/07 22:51, 6年前 , 20F
調整為1列5欄的範圍,clearcontents則清楚該範圍公式和值
07/07 22:51, 20F

07/07 22:52, 6年前 , 21F
保留儲存格格式和條件式格式設定
07/07 22:52, 21F
文章代碼(AID): #1T8TQniq (Office)
文章代碼(AID): #1T8TQniq (Office)