Вы находитесь на странице: 1из 7

HOME BLOG EXCEL TEMPLATES WORD TEMPLATES CALCULATORS CALENDARS

RESUMES ARTICLES LINKS


Search

Home > Articles

How to Create Custom User Defined Excel


Functions
Advanced 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


1. Open up a new workbook.
2. Get into VBA (Press Alt+F11)

3. Insert a new module (Insert > Module)

4. - Copy and Paste the Excel user defined function examples -


5. Get out of VBA (Press Alt+Q)

6. Use the functions (They will appear in the Paste Function dialog box, Shift+F3, under the "User
Defined" category)
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
• Create a complex or custom math function.
• Simplify formulas that would otherwise be extremely long "mega formulas".
• Diagnostics such as checking cell formats.
• Custom text manipulation.
• Advanced array formulas and matrix functions.

Limitations of UDF's
• Cannot "record" an Excel UDF like you can an Excel macro.
• More limited than regular VBA macros. UDF's cannot alter the structure or format of a
worksheet or cell.
• If you call another function or macro from a UDF, the other macro is under the same limitations
as the UDF.
• Cannot place a value in a cell other than the cell (or range) containing the formula. In other
words, UDF's are meant to be used as "formulas", not necessarily "macros".
• Excel user defined functions in VBA are usually much slower than functions compiled in C++
or FORTRAN.
• Often difficult to track errors.
• If you create an add-in containing your UDF's, you may forget that you have used a custom
function, making the file less sharable.
• Adding user defined functions to your workbook will trigger the "macro" flag (a security
issue: Tools > Macros > Security...).

User Defined Function Examples


Example #1: Get the Address of a Hyperlink
The 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 String


This 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 Formula


One 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 Examples


There 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:
• Rounding Significant Figures in Excel :: Shows how to return #NUM and #N/A error values.
• User Defined Function Examples - www.ozgrid.com - Examples of user defined functions or
UDF's for Excel written in VBA. Random numbers, Hyperlinks, count sum or sort by colors.
• UDF Examples and Tips - www.exceltip.com - Writing Your First VBA Function in Excel. Area
of a rectangle (perhaps a little too simple), fuel consumption, and other info about UDF's.
• Build an Excel Add-In - http://www.fontstuff.com/vba/vbatut03.htm - An excellent tutorial that
takes you through building an add-in for a custom excel function.

Cite This Article


To reference this article from your website or blog, please use something similar to the following
citation:
Wittwer, J.W., "How to Create Custom User Defined Excel Functions" from Vertex42.com, January,
2004, http://www.vertex42.com/ExcelArticles/user-defined-functions.html

Become a Fan of Vertex42

Vertex42 Articles
» Dashboard Reports
» Using Excel Solver
» Excel Web Queries
» Custom Excel Functions
» Sparklines
» Excel Shortcuts
» Excel Games
» Invoicing with Excel
Finance
» Amortization Formulas
» Financial Modeling
» Amortization Calculation
» Simple Interest
» Negative Amortization
» Debt Consolidation
» How to Make a Budget
» Budgeting Tips
» Exponential Growth
» Discount Factor
» Resources for Homeowners
Statistics
» Monte Carlo Simulation
» Histograms in Excel
» Random Numbers
» Normal Distribution Graph
» Pareto Chart Analysis
» Dot Plot
» Control Charts
Excel Tips
» Array Formula Examples
» Drop Down List via Data Validation
» Dynamic Named Ranges
» Significant Figures
» Excel's COUNTIF Function
» Toolbar Buttons
» Grouping and Outlining
» Free Excel Training

Excel Templates
»Amortization Schedule
»Asset Tracking
»Attendance Tracking
»Auto Loan
»Balloon Loan
»Budget Worksheet
»Calendar Template
»Check Register
»Class Schedule
»Debt Reduction
»Depreciation
»Expense Reports
»Fax Cover Sheet
»Gantt Chart
»Home Budget
»Home Equity Loan
»Home Mortgage Calculator
»Home Inventory
»Invoice
»Mileage Log
»Money Manager
»Mortgage
»NPV
»Organizational Chart
»Personal Budget
»Project Template
»Purchase Order
»Retirement Savings
»Savings Calculator
»Shift Schedule
»Stock Quotes
»Timesheet
»Timecard
»Timeline Examples
»Wedding Budget
»Weight Loss Chart
»Work Order
»Work Schedule
»Yearly Calendar
»2011 Calendar
»Calendario 2011
»Calendrier 2010

Word Templates
»Resume Template
»Bill of Sale Form
»Business Card Template
»Recipe Card Template
»Gift Certificate Template
Home | Sitemap | Excel Links | About/Contact Us | Privacy | Legal Stuff
Microsoft® and Microsoft Excel® and Microsoft Word® are registered trademarks of Microsoft
Corporation. Vertex42.com is not associated with Microsoft.
© 2003-2010 Vertex42 LLC. All rights reserved.
Custom Excel Functions

Вам также может понравиться