- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
6#
發表於 2015-9-4 22:44
| 只看該作者
C.D欄為被比對資料,
根據A欄數據,取出與C欄相同值所對應D欄數值,並填至B欄(與VLOOKUP相同): ...
准提部林 發表於 2015-9-4 19:50 
大大厲害!
您的程式碼小弟承接了
這是我看過最快的方式了
我用傳統的比對方式要35秒(大約),Vlookup的方式要5秒
您的方式只需要0.1x秒,速度上快了將近50倍....太威了
小弟想請教一下,您舉的例子是A 欄比對 C ,然後取出D
若將題目改A 比對C ,然後得到D,再用D去比對F然後取出G,最後才將G 輸入到B 欄位的話
下方是我用您的方式寫出來的,不曉得如果是大大您本人來撰寫的話,也是會用相同的方式嗎?
還是會用不同的寫法?(更便利or更清楚or更快)
麻煩大大了,大大您的這段程式碼,震撼到小弟了,附檔的部分,會再花時間看,有問題再向大大您請教哦!- Sub TEST_Vlookup()
- 'C.D欄為被比對資料,
- '根據A欄數據 , 取出與C欄相同值所對應D欄數值, 並填至B欄(與VLOOKUP相同):
- Dim TM, Arr, Brr, xRow&, xD, i&
- TM = Timer
- [B:B].Clear: [J1] = ""
- xRow = 20000
- Arr = [A1].Resize(xRow)
- Brr = [C1:D1].Resize(xRow)
- Crr = [f1:g1].Resize(xRow)
- Set xD = CreateObject("Scripting.Dictionary")
- 'C的D
- For i = 1 To UBound(Brr)
- xD(Brr(i, 1)) = Brr(i, 2)
- Next
- '比對結果得到D
- For i = 1 To UBound(Arr)
- Arr(i, 1) = xD(Arr(i, 1))
- Next
- '多加了part1-----------------------(F的G)
- For i = 1 To UBound(Arr)
- xD(Crr(i, 1)) = Crr(i, 2)
- Next
- '多加了part2-----------------------(比對結果得到G)
- For i = 1 To UBound(Arr)
- Arr(i, 1) = xD(Arr(i, 1))
- Next
- [B1].Resize(xRow) = Arr
- [J1] = Timer - TM
- End Sub
複製代碼 |
|