Example 1 – Creating a VBA Function with a Single Argument
Create a function to convert Kg to Grams:
Steps:
- Enter the following code in the module:
Option Explicit
Sub Kgtog()
Dim k As Double
k = ConvertKgtog(20)
Debug.Print k
End Sub
Function ConvertKgtog(CKG As Double) As Double
ConvertKgtog = CKG * 1000
End Function
- Go back to the worksheet.

Code Breakdown:
The Sub procedure- Kgtog is created. k is declared as Double. It will be used to call the function. The function name is defined: ConvertKgtog. The CKG variable is declared as Double. CKG is multiplied by 1000.
- To convert 5kg to grams, use the following formula:
=ConvertKgtog(E4)
- Press ENTER to see the output.

Read More: How to Use VBA Input Function in Excel
Example 2 – Creating a Function with Multiple Arguments in Excel VBA
Create a function to calculate the difference between two numbers:
Steps:
- Enter the following code in the module:
Option Explicit
Function CalculateNum_Difference(Number1 As Integer, Number2 As Integer) As Double
CalculateNum_Difference = Number2 - Number1
End Function
Sub Number_Difference()
Dim Number1 As Integer
Dim Number2 As Integer
Dim Num_Diff As Double
Number1 = "5"
Number2 = "10"
Num_Diff = CalculateNum_Difference(Number1, Number2)
Debug.Print Num_Diff
End Sub
- Go back to the worksheet.

Code Breakdown:
A function CalculateNum_Difference is defined using the Function statement and two variables Number1 and Number2 are declared as Integerd. A Sub procedure is used to call the function- Number_Difference. The arguments of the functions Number1 and Number2 are declared as Integers. Num_Diff is declared as Double.
- Use the following formula in E6:
=CalculateNum_Difference(E4,E5)
- Press ENTER.
This is the output.

Example 3 – Creating a VBA Function with an Optional Argument
Steps:
- Enter the following code in the module:
Option Explicit
Function CalculateNum_Difference_Optional(Number1 As Integer, Optional Number2 As Integer) As Double
If Number2 = 0 Then Number2 = 100
CalculateNum_Difference_Optional = Number2 - Number1
End Function
Sub Number_Difference_Optional()
Dim Number1 As Integer
Dim Number2 As Integer
Dim Num_Diff_Opt As Double
Number1 = "5"
Num_Diff_Opt = CalculateNum_Difference_Optional(Number1)
Debug.Print Num_Diff_Opt
End Sub
- Go back to the worksheet.

Code Breakdown:
Number2 is declared as variable with the Optional statement. The If statement sets the fixed value for the second argument: 100 if it is not selected.
- In E6, enter the following formula:
=CalculateNum_Difference_Optional(E4)
- Press ENTER.

As no second argument was set, 100 was used.
Read More: How to Use VBA User Defined Function
Example 4 – Creating a VBA Function with a Default Argument
Steps:
- Enter the following code in the module:
Option Explicit
Sub Number_Difference_Default()
Dim NumberX As Integer
NumberX = CalculateNum_Difference_Default(Number1)
MsgBox NumberX
End Sub
Function CalculateNum_Difference_Default(Number1 As Integer, Optional Number2 As Integer = "100") As Double
CalculateNum_Difference_Default = Number2 - Number1
End Function
- Go back to the worksheet.

Code Breakdown:
The Sub procedure Number_Difference_Default is declared. The NumberX variable is declared as Integer and is used to call the function. The function CalculateNum_Difference_Default is created and two variables are declared as argument.
- Enter the following formula in E6:
=CalculateNum_Difference_Default(E4)
- Press ENTER.

The second argument is the default value: 100.
How to Create a VBA Function Without Arguments
Steps:
- Enter the following code in the module:
Function Return_Value() As Integer
Return_Value = 100
End Function
- Go back to the worksheet.

- Enter the following formula:
=Return_Value()
- Press ENTER.
100 will always be the output.

How to Call a VBA Function from a Sub Procedure
Create a function to bold E4:E45.

Steps:
- Enter the following code in the module:
Function mReturn_Value() As Range
Set mReturn_Value = Range("E4:E8")
End Function
Sub Test_Return_Value()
Dim miRg As Range
Set miRg = mReturn_Value
miRg.Font.Bold = True
End Sub
- Run the code.

Code Breakdown:
The mReturn_Value function is created and declared as Range. The Test_Return_Value Sub procedure calls the function. The miRg variable is declared as Range. The Set statement connects with the function. Font.Bold bolds the cell range.
This is the output.

How to Use the ByVal and ByRef Arguments in a VBA Function
Steps:
- Enter the following code in the module:
Option Explicit
Sub Using_ByRef()
Dim grandtotal As Long
grandtotal = 1
Call Det(grandtotal)
End Sub
Sub Det(ByRef n As Long)
n = 100
End Sub
- Press F8 to see the output.
The second Sub in the first section is created by using ByRef. It always passes the original value: 100.

- In the code below ByVal was used. It passes the value, not the reference. 1 is returned, instead of 100.
Option Explicit
Sub Using_ByVal()
Dim grandtotal As Long
grandtotal = 1
Call Det(grandtotal)
End Sub
Sub Det(ByVal n As Long)
n = 100
End Sub

Download Practice Workbook
Download the free Excel workbook.
Related Articles
- Excel VBA Function to Return Multiple Values
- How to Execute VBA Function Procedure in Excel
- How to Return a Value in VBA Function
- VBA Sub Vs Function in Excel
- How to Create and Use ColorFunction in Excel
- Difference Between Subroutine and Function in Excel VBA
- How to Create Custom Function in Excel VBA
