VBA 內 VLOOKUP 問題

例如本來的 formula 係...
=VLOOKUP(B2,StaffList.CSV!A:Z,{2,9,10,12,13,18,19},FALSE)

放在 VBA 行會變成
=VLOOKUP(B2,StaffList.CSV!A:Z,@{2,9,10,12,13,18,19},FALSE)

無端端攝個 @ 入去 column index 度, 於是出 error

亦試過用 array 裝住 column index, 佢又係攝個 @ 入去...

請問我係咪做漏咗啲野? 多謝指教

你直接喺VBA寫上面段CODE? 寫法唔同
google下VBA+vlookup

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

本帖最後由 gunsix 於 2020-9-4 16:04 編輯

Sorry 係我問得唔好, 故事係咁的...

我初學 VBA 的, 因為經常要將兩個 file 拍埋, 由第二個 file 抽 7 個 column 出嚟貼入第一個 file

用 macro recorder 錄, 佢生成 ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],StaffList.CSV!C1:C19,2,FALSE)", 同一句出現 7 次, 因為我逐個 column 抽, 抽 7 次

我改成 ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z,2,FALSE)", 因為 reference cell 永遠都係 B2, 同埋易睇啲, 不過一樣要寫 7 次

我想用 For loop 簡化成一句畀佢自己行 7 次, 於是用一個 array 裝住果 7 個 column 位置, 然後改成...

ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z,StaffListColumn[ i ] ,FALSE)"

不過行完個 cell 變成 =VLOOKUP(B2,StaffList.CSV!A:Z,@StaffListColumn[1],FALSE), 唔成功, 多咗個 @

尋晚 google 一下, 原來有所謂 array forumla, 寫成 =VLOOKUP(B2,StaffList.CSV!A:Z,{2,9,10,12,13,18,19},FALSE) 就唔使行 7 次

於是我在 VBA 入面改成 ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z,{2,9,10,12,13,18,19},FALSE)"

點知都係變成 =VLOOKUP(B2,StaffList.CSV!A:Z,@{2,9,10,12,13,18,19},FALSE), 又係多咗個 @

原 code 好長, 下面果段出現 7 次, 只係紅色個字唔同

    Range("D1").Select
    ActiveCell.Formula = "Email Banner"
    Range("D2").Select
    ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z,2,FALSE)"
    Selection.AutoFill Destination:=Range("D2:D" & Range("A" & Rows.Count).End(xlUp).Row)
    Range(Selection, Selection.End(xlDown)).Select

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

回覆  gunsix

我唔知除左row2, 仲有幾多row仲要lookup col B, 所以用左col B最後個row做control, 同時當 ...
myricky 發表於 2020-9-4 03:06 PM


Thanks a lot, 我仲係左抄右抄一知半解, 不過從你的 code 中我明白問題係我唔明 " " 入面的操作, 學你咁用 & 切開就可以了, 即係...

ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z," & StaffListColumn(1) & ",FALSE)"

測試成功 !

餘下係點樣用 For loop 逐個 cell 行, 會再研究你的 code

Thanks a lot!

TOP

嗯, 不過如果係...

ActiveCell.Formula = "=VLOOKUP(B2,StaffList.CSV!A:Z," & "{2,9,10,12,13,18,19}" & ",FALSE)"

仍然變成...

=VLOOKUP(B2,StaffList.CSV!A:Z,@{2,9,10,12,13,18,19},FALSE)

奇怪...

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

試下轉為 Activecell.FormulaArray=
myricky 發表於 2020-9-4 07:52 PM


Thanks, 剛試咗, 個 cell value 變成

{=VLOOKUP(B2,StaffList.CSV!A:Z,{2,9,10,12,13,18,19},FALSE)}

冇攝 @ 了, 不過亦唔識爆開 7 個 cell...

我諗放棄呢招了, 反正上面已解決用唔到 array 的問題, 一於用 array 吧

TOP

回覆  gunsix

我唔知除左row2, 仲有幾多row仲要lookup col B, 所以用左col B最後個row做control, 同時當 ...
myricky 發表於 2020-9-4 03:06 PM


我想請教一下你段 code, 第一句入面 Cells(10000, "b"), 點解用 10000? 我理解成句係用嚟攞最後一行個數目, 不過唔明點解 10000

你個方法係用 For loop 將每個 cell 都放一個 VLOOKUP, 咁同只將 VLOOKUP 放第一行然後 Selection.AutoFill 向下抄落去, 運算時間係咪其實一樣?

多謝指教

TOP