How to Create Custom User Defined Excel FunctionsAdvanced Excel Techniques - (1/7/04) by Jon Wittwer
Excel allows you to create custom functions, called "User Defined Functions" (UDF's) that can be used the same way you would use SUM() or some other built-in Excel function. The Excel enthusiast who wishes to use advanced mathematics or perform text manipulation is often seriously disappointed by Excel's limited library of formulas and functions. However, all is not lost! For an excellent explanation of pretty much everything you need to know to create your own custom Excel function, I would recommend John Walkenbach's book, Excel 200X Formulas. The book provides many good user defined function examples, so if you like to learn by example, it is a great resource. This article will help you get started with user defined functions and show a couple of cool examples. How to Create Excel User Defined Functions
If you want to use a UDF in more than one workbook, you can save your functions in your own custom add-in. Simply save your excel file that contains your VBA functions as an add-in file (.xla). Then load the add-in (Tools > Add-Ins...). Warning! Be careful about using custom functions in spreadsheets that you need to share with others. If they don't have your add-in, the functions will not work when they use the spreadsheet. Benefits of User Defined Excel Functions
Limitations of UDF's
User Defined Function ExamplesExample #1: Get the Address of a HyperlinkThe following example can be useful when extracting hyperlinks from tables of links that have been copied into Excel, when doing post-processing on Excel web queries, or getting the email address from a list of "mailto:" hyperlinks. This function is also an example of how to use an optional Excel UDF argument. The syntax for this custom Excel function is: =LinkAddress(cell,[default_value]) To see an example of how to work with optional arguments, look up the IsMissing command in Excel's VBA help files (F1). Function LinkAddress(cell As range, _
Optional default_value As Variant)
'Lists the Hyperlink Address for a Given Cell
'If cell does not contain a hyperlink, return default_value
If (cell.range("A1").Hyperlinks.Count <> 1) Then
LinkAddress = default_value
Else
LinkAddress = cell.range("A1").Hyperlinks(1).Address
End If
End Function
Example #2: Extract the Nth Element From a StringThis example shows how to take advantage of some functions available in VBA in order to do some slick text manipulation. What if you had a bunch of telephone numbers in the following format: 1-800-999-9999 and you wanted to pull out just the 3-digit prefix? This UDF takes as arguments the text string, the number of the element you want to grab (n), and the delimiter as a string (eg. "-"). The syntax for this example user defined function in Excel is: =GetElement(text,n,delimiter) Example: If B3 contains "1-800-333-4444", and cell C3 contains the formula, =GetElement(B3,3,"-"), C3 will then equal "333". To turn the "333" into a number, you would use =VALUE(GetElement(B3,3,"-")). Function GetElement(text As Variant, n As Integer, _
delimiter As String) As String
'Returns the nth element from a delimited text string
Dim txt, str As String
Dim count, i As Integer
'Manipulate a copy of the text string
txt = text
'If a space is used as the delimiter, remove extra spaces
If delimiter = Chr(32) Then txt = Application.Trim(txt)
'Add a delimiter to the end of the string
If Right(txt, 1) <> delimiter Then
txt = txt & delimiter
End If
'Initialize count and element
count = 0
str = ""
'Get each element
For i = 1 To Len(txt)
If Mid(txt, i, 1) = delimiter Then
count = count + 1
If count = n Then
GetElement = str
Exit Function
Else
str = ""
End If
Else
str = str & Mid(txt, i, 1)
End If
Next i
GetElement = ""
End Function
If that was too complicated, you can also try it the easy way using the single line of code below, which makes use of the Split function. Function GetElement(text As Variant, n As Integer, _
delimiter As String) As String
GetElement = Split(text, delimiter)(n - 1)
End Function
Example #3: UDF for a Custom Mathematical FormulaOne of the nice things about custom Excel functions is that you can simplify Excel formulas that would otherwise use nested If...Then... statements. As an example, let's say we have a simple function that includes division, but the formula changes when the divisor is zero. Also, we want to do some error checking, so we don't end up with #VALUE all over our spreadsheet. For this example, we'll look at the KEI formula (Keyword Effectiveness Index), which when simplified looks something like this when using built-in Excel functions: =IF(supply=0,demand^2,demand^2/supply) The syntax for the custom user defined function is: =KEI(demand,supply,[default_value]) Function KEI(demand As Variant, supply As Variant, _
Optional default_value As Variant) As Variant
'Keyword Effectiveness Index (KEI)
If IsMissing(default_value) Then
default_value = "n/a"
End If
If IsNumeric(demand) And IsNumeric(supply) Then
If supply = 0 Then
KEI = demand ^ 2
Exit Function
Else
KEI = demand ^ 2 / supply
Exit Function
End If
End If
KEI = default_value
End Function
More Custom Excel Function ExamplesThere are certainly many more examples of UDF's for Excel. Again, I would strongly recommend John Walkenbach's book, Excel 200X Formulas. But, if you are looking for examples on the internet, you may want to check out the following websites:
|
||
|
|
|