2017-04-07 89 views
0

我想通過VBA在excel中創建一個函數,並想知道是否可以在該函數內使用excel內置函數。例如,查找或匹配等功能。我有與VBA &公式的解決方案,但有興趣知道功能是否可以做到這一點。是否可以在由VBA創建的用戶定義或定製函數中使用excel內置函數?

我想創建一個函數,其中VLookup應該只返回第一個找到的項目的值。

'function which can return the Vlookup value only for 1st found value 
Function SLOOKUP(Pvalue As Range, Rng As Range, Rng1 As Range, pIndex As Long) 

    Dim Cvalue As Variant 
    Dim Mvalue As Long 
    Dim Uvalue As Long 
    Dim Result As Variant 
    Result = "" 

Cvalue = Pvalue.Value 
Mvalue = Application.Worksheet.Function.Match(Cvalue, Rng, -1) 
Uvalue = Pvalue.Row 

If Mvalue = Uvalue Then 
Result = Application.Worksheet.Function.VLookup(Cvalue, Rng1, pIndex, 0) 
Else 
Result = 0 
End If 

SLOOKUP = Result 

End Function 
+1

的答案是「是」,有一些注意事項/限制(即,特別是UDF是不一般不允許改變環境)。 如果你想要更多的特殊性,你應該包括你想要做什麼,以及你試圖編寫或使用什麼代碼。 –

+0

我已添加代碼。讓我知道你的想法嗎? – user3200076

+0

什麼似乎是問題?有沒有錯誤? –

回答

1

下面是一個使用MAX()SUM()的例子

Public Function whatever(rin As Range) As Variant 
    Dim mx As Variant 
    mx = Application.WorksheetFunction.Max(rin) 
    whatever = Application.WorksheetFunction.Sum(rin)/mx 
End Function 

注意,不是所有內置的工作表函數可以在VBA中使用這樣的。以下是可用的:

List of Worksheet Functions Available to Visual Basic

+0

謝謝,我怎樣才能獲得哪些功能無法使用的細節? – user3200076

+0

@ user3200076看我的編輯 –

+0

感謝分享如果我使用Match和Vlookup,我的代碼不起作用 – user3200076

相關問題