看板 Office 關於我們 聯絡資訊
軟體: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
soyoso: 不太了解原po對公式VLOOKUP(P2,標準!B:L,5,FALSE)的理解 07/07 19:55
soyoso: 在P:P範圍貼上多個數值會在B:B的位置去回傳值? 07/07 19:55
soyoso: 這公式的意思是以p2的值,搜尋標準!B:L這個範圍內最左欄( 07/07 19:56
soyoso: 也就是b欄),搜尋到後回傳左起第5欄(f欄)的儲存格值 07/07 19:58
soyoso: 且回傳上是b欄第一筆搜尋到 07/07 20:00
soyoso: 公式為這樣理解,和原po實際要回傳的資料上是否一致呢? 07/07 20:02
t6370345: 不好意思沒說清楚,公式要跳行P2,下一行就變P3這樣 07/07 20:06
soyoso: 如p2起貼入資料,以序將資料(標準!B:L從b起第5欄的f欄資料 07/07 21:01
soyoso: )回傳至b2,以內文巨集來改的話 07/07 21:01
soyoso: 1、變數xCr為array(-13),xCf為array(5) 07/07 21:01
soyoso: 2、.column<>1改為p欄欄號16 07/07 21:01
soyoso: 若只有要回傳標準!B:L從b起第5欄資料的話,for j..next也 07/07 21:02
soyoso: 可以不用寫,迴圈內變數xCr(j)和xCf(j)就以常數 07/07 21:04
soyoso: 3、變數Data方面內文巨集內沒看到宣告,也沒指定 07/07 21:16
soyoso: 這方面可自行指定到工作表"標準",以worksheets或 07/07 21:17
soyoso: sheets 07/07 21:17
※ 編輯: t6370345 (39.10.140.253 臺灣), 07/07/2019 21:57:59
t6370345: 另外想問,xR(1, 3).Resize(1, 5).ClearContents 這個是 07/07 22:01
t6370345: 什麼意思呢? 07/07 22:01
soyoso: xR這個儲存格往右2欄,往右2欄的這個儲存格resize(1,5)為 07/07 22:50
soyoso: 調整為1列5欄的範圍,clearcontents則清楚該範圍公式和值 07/07 22:51
soyoso: 保留儲存格格式和條件式格式設定 07/07 22:52