Board logo

標題: [發問] excel 函數應用在VBA 的問題 [打印本頁]

作者: hugh0620    時間: 2010-11-22 12:04     標題: excel 函數應用在VBA 的問題

各位大大

      小弟一直對excel 函數應用在vba上的技巧一直不是很熟練
      是否可以教導我一下~
         像是下面的在vba使用vlookup這個函數
      在vba使用函數要使用Application.WorksheetFunction,再加上要用之函數
      我是要用vlookup這個函數
      我就打了Application.WorksheetFunction.vlookup(arg1,arg2,arg3,[arg4])

        下列是我的程式碼
      wf = Application.WorksheetFunction.VLookup(Sheet1.Cells(5, 9) & Sheet1.Cells(5, 10) & Sheet1.Cells(5, 14), Sheet2.Range("A4:I1000"), 9, False)
         Sheet1.Cells(5, 46) = wf
         
         但無法執行
      問題1:有關函數在vba的應用是否可以提供一個基本的撰寫邏輯 (可否提供一個範例)
         問題2: vlookup(arg1,arg2,arg3,[arg4]) 中的arg是什麼意思,我撰寫的地方哪邊發生問題
作者: oobird    時間: 2010-11-22 12:38

語法
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
你的lookup_value為Sheet1.Cells(5, 9)& Sheet1.Cells(5, 10) & Sheet1.Cells(5, 14)三個儲存格合并起來的字符,table_array的第一欄就要有與這個字符相符的內容,不可以分開三個欄位放置。
作者: hugh0620    時間: 2010-11-22 13:49

語法
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
你的lookup_value為Sheet1.Cells(5 ...
oobird 發表於 2010-11-22 12:38



    大大你講的這個我清楚,在excel 函數使用上沒有問題
   問題在於寫在VBA上時,Vlookup這個函數程式碼上該如何撰寫
作者: oobird    時間: 2010-11-22 14:39

就如一樓的寫法沒錯的。看到二樓的紅字嗎?你就少個連接符。
作者: hugh0620    時間: 2010-11-23 11:36

本帖最後由 hugh0620 於 2010-11-23 11:46 編輯

大大~ 您是對的~ 但我卻又延伸出一個問題

當我程式碼在跑的時候,如果遇到vlookup抓不到資料時,出現#N/A時
程式就會停止,請問大大該如何處理

在函數中是比較好處理就用if(iserror(vlookup(lookup_value,table_array,col_index_num,range_lookup),"",lookup_value,table_array,col_index_num,range_lookup)) 就可以將抓不到資料的部份,變成空格

若是我要在vba上處理,該如何做呢??  請大大指導一下

在vba之前的處理方式,如下

   Sheet1.Cells(4 + x, 48).Formula = "=IF(ISERROR(VLOOKUP(RC[-39]&RC[-38]&RC[-34],SBD!R3C1:R10000C9,9,FALSE)),"""",VLOOKUP(RC[-39]&RC[-38]&RC[-34],SBD!R3C1:R10000C9,9,FALSE))"
    Sheet1.Cells(4 + x, 48) = Sheet1.Cells(4 + x, 48)  <---主要是不想讓活頁上帶出公式
但是這樣的處理方式,讓我在執行時跑起來要等待很久的時間
作者: Hsieh    時間: 2010-11-23 12:04

回復 5# hugh0620


If IsError(Application.VLookup(Sheet1.Cells(5, 9) & Sheet1.Cells(5, 10) & Sheet1.Cells(5, 14), Sheet2.Range("A4:I1000"), 9, False)) Then
wf = ""
Else
wf = Application.VLookup(Sheet1.Cells(5, 9) & Sheet1.Cells(5, 10) & Sheet1.Cells(5, 14), Sheet2.Range("A4:I1000"), 9, False)
End If
作者: hugh0620    時間: 2010-11-23 12:37

感謝各位大大~ 問題已經解決了~

只是因為我的資料較大,這樣處理的訴度有點慢而已~
作者: oobird    時間: 2010-11-23 13:34

vba有vba的方法,你在vba中勉強使用工作表函數速度就不能兼顧了!
作者: hugh0620    時間: 2010-11-25 14:21

回復 6# Hsieh


    請問大大一個問題,大大的寫法是:Application.VLookup  為何不是Application.WorksheetFuncation.VLookup  
                             因為我在編寫程式碼的時候,要編寫Application.WorksheetFuncation的時候,在點的時候才會出現函數的選單
                   這兩者間的差異在哪呢??    請大大教導一下,幫學習中的我解惑
                   ps.我編寫的是WorksheetFuncation.函數,可是卻會產生錯誤
          If IsError(Application.VLookup(Sheet1.Cells(4 + X, 9) & Sheet1.Cells(4 + X, 10) & Sheet1.Cells(4 + X, 14), Sheet3.Range("A4:I15000"), 9, False))




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