Board logo

標題: 有關Vlookup的用法 [打印本頁]

作者: bulletin    時間: 2014-2-12 18:38     標題: 有關Vlookup的用法

各位前輩好
使用Vlookup的時候碰到一個問題

資料夾當中有各公司的財報,開啟一個檔案想擷取各公司財報中的部分資訊
[attach]17484[/attach]

程式碼如附檔,我總共試了A~D共4種方法,前兩種可行,後兩種不可行
  1. Private Sub CommandButton1_Click()

  2.     Dim StartTime, LastRow
  3.     StartTime = Timer
  4.     LastRow = Sheets(1).Range("A2").End(xlDown).Row '找出最後一筆資料
  5.     Application.ScreenUpdating = False
  6.    
  7.     For i = 2 To LastRow
  8.         
  9.         Dim A
  10.             A = Range("A" & i).Value      
  11.             Workbooks.Open Filename:="C:\Users\KT\Documents\2014_backup\KT\投資理財\Excel分析模組\" & A & "季報.xlsx", UpdateLinks:=False, ReadOnly:=True

  12.         '方法A 指定儲存格
  13.                  Range("E" & i).FormulaR1C1 = "=[" & A & "季報.xlsx]ISQ!R4C2"
  14.         
  15.         '方法B VLookup
  16.             
  17.                     Range("E" & i).FormulaR1C1 = "=VLOOKUP(R[-" & i - 1 & "]C,[" & Range("A" & i).Value & "季報.xlsx]ISQ!R1C1:R52C9, 2, FALSE)"
  18.        
  19.         '方法C  --> 不可行, 顯示錯誤'1004' 應用程式或物件定義上的錯誤

  20.                 Range("E2").FormulaR1C1 = _
  21.                         "=VLOOKUP(R[-1]C,[1101季報.xlsx]ISQ!$A$1:$J$58,2,FALSE)"
  22.            
  23.         '方法D  --> 不可行, 編譯錯誤 必須是陳述式的結尾

  24.                 Range("E" & i).FormulaR1C1 = "=VLOOKUP(Range("E2").value,[" & Range("A" & i).Value & "季報.xlsx]ISQ!R1C1:R52C9, 2, FALSE)"
  25.                                                  
  26.          Windows(A & "季報.xlsx").Close
  27.          
  28.     Next i
  29.    
  30.     Application.ScreenUpdating = True
  31.     EndTime = Timer
  32.     MsgBox "本次下載共花費:" & EndTime - StartTime & "秒"

  33. End Sub
複製代碼
想請前輩指導為何方法C與D會發生錯誤
謝謝
作者: stillfish00    時間: 2014-2-12 19:32

本帖最後由 stillfish00 於 2014-2-12 19:49 編輯

回復 1# bulletin
C :
是因為儲存格的位置可以有兩種表示方法,一種是常見的A1樣式,一種是R1C1樣式
使用FormulaR1C1指定公式時需要用R1C1樣式
使用Formula指定公式 才是用A1樣式
錯在 Range("E2").FormulaR1C1 = "=VLOOKUP(R[-1]C,[1101季報.xlsx]ISQ!$A$1:$J$58,2,FALSE)"

D :
你沒弄懂字串,你要的應該是這樣吧...
"=VLOOKUP(""" & Range("E2").value & """,[" & Range("A" & i).Value & "季報.xlsx]ISQ!R1C1:R52C9, 2, FALSE)"

藍色是文字字串,代表的是雙引號內的文字,文字字串內的雙引號要用兩個雙引號代替
綠色是VBA的語法,取回儲存格內容
然後用 & 把各個部分結合起來成為一個字串
作者: bulletin    時間: 2014-2-12 23:41

回復 2# stillfish00


多謝您的指教
學到很多啊!!
果然可以使用了
謝謝!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)