A User Defined Function (UDF) in Excel VBA is a custom function created by users to perform specific tasks or calculations that are not available in built-in Excel functions. These functions can enhance productivity and automate complex tasks.
UDF Syntax
Function <function_name>(<arg> As <type>,...) As <type>
// user logic
End Function
Example
Function CircleArea(radius As Double) As Double
CircleArea = 3.14 * radius * radius
End Function
The function is then called in an Excel sheet as shown below :
=CircleArea(5)
Debugging in Excel VBA
Debugging involves finding and fixing errors in your code to ensure the function works correctly. Common VBA debugging techniques include using breakpoints, the Immediate Window, and step-through execution.
Steps to Create a User-Defined Function in Excel VBA?
Follow the below steps to learn how to create a User Defined Function in Excel.
Step 1: Open VBA Editor, Access File Tab, and Select Options
Press Alt + F11 to open the VBA editor or Go to the File Tab in the opened Excel Sheet and select the Options.
.gif)
Step 2: Customize Ribbon and Enable Developer
Select the option of Customize Ribbon from the displayed box and enable Developer, then go to the Developer tab and open Visual Basic.
.gif)
Step 3: Create a Module and Paste UDF
The User Defined Function (UDF) which you understood above should be pasted by creating a module in Microsoft given a Visual Basic. Open the Visual Basic and on the right panel select modules and right-click and create a new module. Open the created module and paste the required UDF.
Example: given Excel text
The two UDFs are GetFirstLetter and GetLastLetter. They take a String as an argument and return a String as a Visual Return Type.
Function GetFirstLetter(inputText As String) As String
' Check if the input text is not empty
If Len(inputText) > 0 Then
' Extract the first letter using the Left function
GetFirstLetter = Left(inputText, 1)
Else
' Return an empty string if the input is empty
GetFirstLetter = ""
End If
End Function
Function GetLastLetter(inputText As String) As String
' Check if the input text is not empty
If Len(inputText) > 0 Then
' Extract the first letter using the Left function
GetLastLetter = Left(inputText, 1)
Else
' Return an empty string if the input is empty
GetLastLetter = ""
End If
End Function

Steps to Debug a User-Defined Function in Excel VBA
Debugging in Excel VBA means finding errors in your code and figuring out why they occur.
Prerequisites
- Access to the VBA Editor.
- Enabled macro settings in Excel.
- The source code of UDF.
- Understanding of basic debugging concepts.
- Knowledge of how your UDF is invoked.
- Familiarity with debugging tools (Immediate Window, Watch Window, Locals Window).
Step 1: Go to File and Click Options
You should open the Visual Basic, and edit Excel. Go to Excel given Go to Debug the previously created UDFs. Go to the File tab and Click on options.
Step 2: Click on Customize Ribbon, Enable Developer, the Excel, and Select Visual Basic
After clicking options, an Excel options box will open. Select the option of Customize Ribbon and Enable Developer. Open the Developer tab and click on Visual Basic.
.gif)
Step 3: Open Visual Basic and paste the UDFs
Set a Breakpoint by clicking on the left margin of the required line. Execute your UDF by entering it in a cell or running it from another macro. Open Visual Basic and paste the UDFs. Click on any code line you want to pause (The line is marked with a red dot on the left margin). Go to the cell and click it to start the debugger.

Features
- Pause code execution at specific lines.
- Interactively explore and manipulate variables.
- Monitor variable values in real time.
- Keep an eye on specific variables during execution.
Benefits
- Debugging saves time by pinpointing errors quickly.
- Step through code to understand its flow and catch errors.
- Gain insights into how your code behaves during execution.
- Ensure your UDF works as intended before deploying it.
Common Debugging Tools in Excel VBA
1. Immediate Window
Use this to test expressions and evaluate variables while the code is running.
2. Watch Window
Monitor specific variables and track changes in their values.
3. Locals Window
View all the local variables in scope during code execution.
4. Breakpoints
Pause code execution at a specified line to examine variable states and flow.
UDF works in debug mode but it doesn't give value into the cell:
If a User Defined Function (UDF) in Excel VBA works correctly in debug mode but does not return a value in the cell, there are a few possible causes. Here are some common issues and troubleshooting steps to resolve them:
Method 1: Ensure UDF Returns a Value
Verify that the UDF assigns a result to the function name, e.g., CircleArea = 3.14 * radius * radius.
Method 2: Avoid Changing Worksheet Properties
UDFs should only return values, not modify the worksheet.
Method 3: Handle Errors in the UDF
Add error handling (On Error Resume Next) and use Debug.Print for checking intermediate results.
Method 4: Validate Input Parameters
Make sure the arguments passed are valid (e.g., numeric values where expected).
Method 5: Recalculate the Workbook
Press Ctrl + Alt + F9 to force a recalculation and ensure automatic calculation is enabled.
Method 6: Check UDF Syntax in the Cell
Confirm you’re calling the UDF correctly, such as =CircleArea(5).
Method 7: Watch for Circular References
Avoid circular dependencies in formulas.
Method 8: Enable Macros
Make sure macros are enabled in Excel's Trust Center. If you want to learn how to enable macros in excel click here.
Method 9: Test in a New Worksheet
Try the UDF in a different sheet to rule out any worksheet-specific issues.
These steps should help resolve why your UDF isn’t returning a value in the cell.