We knew how to create custom VBA functions and use them in the worksheet. If you are looking for special tricks to know how to use VBA function procedure arguments in Excel, you’ve come to the right place. This article focuses on various kinds of arguments you can use in VBA functions. Function arguments can be variables (including arrays), constants, literals, or expressions. Keep in mind the following about function procedure arguments:
- Some functions do not have any arguments.
- Some functions have a fixed number of required arguments (from 1 to 60).
- Some functions have a combination of required and optional arguments.
The following sections demonstrate how to use the VBA function procedure with arguments in Excel.
Download Practice Workbook
Download this practice workbook to exercise while you are reading this article. It contains all the datasets and methods in different spreadsheets for a clear understanding.
Function vs Sub Procedure in VBA
Function:
Functions are programs that perform statements and return their results. The purpose of functions is to automate repetitive tasks.
Using functions in a large program primarily avoids redundancy and ensures reusability. Functions are normally used to return values.
Here is an example of a function.
Function Area(Length, Width)
'Finding out the Area of the Rectangle.
Area = Length * Width
MsgBox "The Area of your Rectangle is: " & Area
End Function
Sub Procedure:
An argument to a sub-procedure specifies a set of statements that perform the specified actions, but the result will not be returned from the sub-procedure. As shown below, Sub does not have a return type-like function. Mainly used to simplify maintenance of large programs by dividing them into smaller parts. Between Sub and End Sub statements, a sub procedure contains a series of statements.
Here is an example of Sub Procedure.
Sub GetRowNumber()
rowNumber = Range("B4").row
MsgBox "Here,Row Number is: " & rowNumber
End Sub
How to Write a Function in Excel VBA
The syntax of a function is given value:
Function Name of function [(arglist)] [As type]
[statements]
End Function
Function: It is necessary to use the term “function” as a keyword.:
Name of Function: You are free to use any name you like when referring to a function. It is necessary to adhere to specific naming norms.
argList: At the time of a function call, variables are passed to it.
Type: The function’s return type is its data type.
Statements: Function-specific actions.
Here is an example of a function.
Function Area(Length, Width)
Area = Length * Width
MsgBox "The Area of your Rectangle is: " & Area
End Function
By using the above function we will calculate the area of a rectangle in Excel.
To do this, after inserting the code in the VBA module, you have to use the following formula in cell D5:
=Area(100,40)
The area of a rectangle can then be calculated by pressing Enter after that. This function displays the area of the rectangle in a message box after the user provides it with two arguments (Length and Width).
What Are Arguments in VBA?
During procedure definition, arguments are declared, which can be used to pass data to VBA procedures. Here, the sub-procedure takes more than one argument.
Sub calculation()
Call house_1_calculation(380955, 49505)
End Sub
Sub house_1_calculation(price As Single, wage As Single)
If 2.5 * wage <= 0.8 * price Then
MsgBox "This place is not affordable."
Else
MsgBox "This place is suitable for you."
End If
End Sub
Keep in mind that arguments are not required for VBA Functions or Subs. They may not be necessary for all procedures.
You can also specify optional arguments for VBA procedures.
There are two ways that arguments can be supplied to VBA procedures: ByRef, ByVal
3 Examples of VBA Function Procedure with Arguments in Excel
In the following section, we will use three effective and tricky examples of VBA function procedure with arguments in Excel. This section provides extensive details on these examples. You should learn and apply these to improve your thinking capability and Excel knowledge. We use the Microsoft Office 365 version here, but you can utilize any other version according to your preference.
1. A Function with One Argument
Here we will demonstrate two examples of a function with the argument: converting text to speech and calculating commission. The examples are discussed in detail in this section.
1.1 Converting Text to Speech
Here, we will demonstrate the first example of a function with one argument. For demonstration purposes, we will use the following dataset, where we will convert the text into speech.
Here, we will convert the text “Good Achievement” into speech. Let’s walk through the following steps to do the task.
📌 Steps:
- VBA has its own separate window to work with. You have to insert the code in this window too. To open the VBA window, go to the Developer tab on your ribbon. Then select Visual Basic from the Code group.
- VBA modules hold the code in the Visual Basic Editor. It has a.bcf file extension. We can create or edit one easily through the VBA editor window. To insert a module for the code, go to the Insert tab on the VBA editor. Then click on Module from the drop-down.
- As a result, a new module will be created.
- Now select the module if it isn’t already selected. Then write down the following code in it.
Function SpeakTheText(text)
Application.Speech.Speak (text)
End Function
- Next, save the code.
- Then, if you want to use the SpeakTheText() function to hear the content of cell B5, you have to use the following formula in cell C5:
=SpeakTheText(B5)
- Next, press Enter.
- Therefore, you will hear the voice saying “Good Achievement”. To hear the voice, your system must be set up to play sound.
Overview of Speak() Method:
We will introduce you to the method Speak(). This method has the following syntax:
expression.Speak (Text, [SpeakAsync], [SpeakXML], [Purge])
The expression represents a Speech object.
Though Speak() method can take three arguments, but Text argument is the required one, the rest are optional. We shall use the Speak() function by passing only the Text argument. So, for this case, it is a function with one argument. This method uses an Excel text-to-speech generator to “speak” the text passed to it through Text argument.
When you use the SpeakTheText function in a worksheet formula, the function always returns 0, because this function is returning nothing. In other words, I can say, there is no value assigned to the function’s name (SpeakTheText) variable.
1.2 Calculating Commission
Here, we will demonstrate the second example of a function with one argument. Now we are going to deal with a more complex function. This function is designed for a sales manager who calculates the monthly commission that he has to pay to his salespersons. To boost up the sales of the company, the commission rate structure is based on the amount sold— those who will sell more will earn a higher commission rate. The function takes the sales amount through the only argument (Sales) and returns the commission earned by a salesperson. The function will calculate the commission according to the following dataset. For demonstration purposes, we will use the following dataset, where we will calculate commission in three different ways. First, we will use the nested IF function, then the VLOOKUP function, and finally we will use the VBA code to calculate the commission value.
- First of all, select the cell and type the following formula.
=IF(AND(B6>=0,B6<=9999.99),B6*0.08,IF(AND(B6>=10000,B6<=19999.99),B6*0.105,IF(AND(B6>=20000,B6<=39999.99),B6*0.12,IF(B6>=40000,B6*0.14,0))))
- Next, press Enter.
- Next, drag the Fill Handle icon to fill the other cells with the formula. Therefore, you will get the following commission calculated by the nested IF function.
- Then, select the cell and type the following formula.
=VLOOKUP(B6, $G$6:$H$9,2)*B6
- Next, press Enter.
- Next, drag the Fill Handle icon to fill the other cells with the formula. Therefore, you will get the following commission calculated by the VLOOKUP function.
Now, we are going to calculate the commission by using the VBA code. Let’s walk through the following steps to do the task.
📌 Steps:
- VBA has its own separate window to work with. You have to insert the code in this window too. To open the VBA window, go to the Developer tab on your ribbon. Then select Visual Basic from the Code group.
- VBA modules hold the code in the Visual Basic Editor. It has a.bcf file extension. We can create or edit one easily through the VBA editor window. To insert a module for the code, go to the Insert tab on the VBA editor. Then click on Module from the drop-down.
- As a result, a new module will be created.
- Now select the module if it isn’t already selected. Then write down the following code in it.
Function CommissionEarning(Sales)
'Calculates sales commissions
Rate1 = 0.08
Rate2 = 0.105
Rate3 = 0.12
Rate4 = 0.14
Select Case Sales
Case 0 To 9999.99
CommissionEarning = Sales * Rate1
Case 10000 To 19999.99
CommissionEarning = Sales * Rate2
Case 20000 To 39999.99
CommissionEarning = Sales * Rate3
Case Is >= 40000
CommissionEarning = Sales * Rate4
End Select
End Function
- Next, save the code.
- Then, you have to use the following formula in cell E5:
=CommissionEarning(B5)
- Next, press Enter.
- Therefore, you will; be able to calculate the commission by using the VBA code as shown below.
- Then copy this function for other cells. Therefore, you will get the following output.
2. A Function with Two Arguments
In this example, we are going to write a VBA function that will calculate the area of a rectangle. We know the area of a rectangle= Length ☓ Width.
Here, we will use the following length and width to calculate the Area of a rectangle.
Let’s walk through the following steps to do the task.
📌 Steps:
- VBA has its own separate window to work with. You have to insert the code in this window too. To open the VBA window, go to the Developer tab on your ribbon. Then select Visual Basic from the Code group.
- VBA modules hold the code in the Visual Basic Editor. It has a.bcf file extension. We can create or edit one easily through the VBA editor window. To insert a module for the code, go to the Insert tab on the VBA editor. Then click on Module from the drop-down.
- As a result, a new module will be created.
- Now select the module if it isn’t already selected. Then write down the following code in it.
Function Area(Length, Width)
'Finding out the Area of the Rectangle.
Area = Length * Width
MsgBox "The Area of your Rectangle is: " & Area
End Function
- Next, save the code.
- Then, you have to use the following formula in cell D5:
=Area(100,40)
- Next, press Enter.
- Therefore, you will be able to calculate the area of a rectangle. This function takes two arguments(Length and Width) from the user and shows the area of the rectangle in a message box.
Similar Readings
- How to Use VBA Rnd in Excel (4 Methods)
- Use the VBA Environ Function (4 Examples)
- How to Use VBA Int Function in Excel ( 3 Examples)
- Use VBA IsEmpty Function (5 Relevant Examples)
- How to Use the VBA Weekday Function (2 Suitable Examples)
3. A Function with a Range of Arguments
Here, we will demonstrate the last example of using the VBA function procedure with arguments in Excel. Let’s make some assumptions. Say, you have some values. The number of values may be 100, 1000, or any. Your boss has told you to give him the average of the largest 5 values of this data. What can you do? First, you’ll think that whether there is any predefined function in Excel to solve it efficiently. Yes, it has a LARGE function. The LARGE function does not give the result directly. You have to use it trickily. You can use the LARGE function in the following way (assuming that you have 20 values and the data range is named “DataAvg”):
=(LARGE(DataAvg, 1)+LARGE(DataAvg, 2)+LARGE(DataAvg, 3)+ LARGE(DataAvg, 4)+LARGE(DataAvg, 5))/5
The above formula will return the average of the largest 5 values of your data. The formula works fine, but you will face a problem when next time your boss will ask you to average of 100 values from a data range of say 2000 values. This time you have to rewrite this formula in a new way and it is really toilsome. Here comes the custom VBA function, TopAverage (DatAvg, Num).
The dataset will look like this.
Let’s walk through the following steps to do the task.
📌 Steps:
- VBA has its own separate window to work with. You have to insert the code in this window too. To open the VBA window, go to the Developer tab on your ribbon. Then select Visual Basic from the Code group.
- VBA modules hold the code in the Visual Basic Editor. It has a.bcf file extension. We can create or edit one easily through the VBA editor window. To insert a module for the code, go to the Insert tab on the VBA editor. Then click on Module from the drop-down.
- As a result, a new module will be created.
- Now select the module if it isn’t already selected. Then write down the following code in it.
Function TopAverage(DataAvg, Num)
'Returns the average of the highest Num values in Data
Sum = 0
For i = 1 To Num
Sum = Sum + WorksheetFunction.Large(DataAvg, i)
'Large(Data, i) returns the ith largest value from the Data.
Next i
TopAverage = Sum / Num
MsgBox "The average is: " & TopAverage
End Function
The code initializes the Sum variable to 0. Then it uses For- Next loop to calculate the sum of the Num number largest values. Notice that we have used the built-in LARGE function of Excel in the code. You can use any worksheet function in the custom VBA function using WorksheetFunction and a period before the function name (WorksheetFunction.LARGE).
Finally, the average is found just by dividing the Sum by the Num (Sum/Num). We showed the result in a message box with this text: “The average is: “.
- Next, save the code.
- Then, you have to use the following formula in cell C5:
=TopAverage(DataAvg,5)
- Next, press Enter.
- Therefore, you will get the following output.
This situation exemplifies how a custom function can make things easier for you. This function takes two arguments: DataAvg and Num. DataAvg represents the range of data that you’re working with. Num is the number of largest values you want to average from the data range.
How to Create Sub Procedure with Argument in Excel
A Sub procedure is a collection of Visual Basic statements that are delimited by the Sub and End Sub statements and that carry out operations without producing a result. Constants, variables, and expressions that are supplied by a calling procedure are examples of arguments that a sub-procedure may accept. There must be an empty parenthesis in the Sub statement if the Sub procedure has no arguments.
Here, the sub-procedure takes more than one argument.
Sub calculation()
Call house_1_calculation(380955, 49505)
End Sub
Sub house_1_calculation(price As Single, wage As Single)
If 2.5 * wage <= 0.8 * price Then
MsgBox "This place is not affordable."
Else
MsgBox "This place is suitable for you."
End If
End Sub
Therefore, using the aforementioned code, we can quickly determine whether the house is a good fit for us based on our wage and the asking price of the house. We will receive the following output after running the aforementioned code that was inserted into the VBA module.
Conclusion
That’s the end of today’s session. I strongly believe that from now, you may be able to VBA function procedure with arguments in Excel. If you have any queries or recommendations, please share them in the comments section below.
Don’t forget to check our website Exceldemy.com for various Excel-related problems and solutions. Keep learning new methods and keep growing!
Related Articles
- VBA Date Function (12 Uses of Macros with Examples)
- How to Use VBA InstRev Function (7 Suitable Examples)
- Use the VBA Chr Function (2 Examples)
- How to Use the Left Function in VBA in Excel (2 Examples)
- Call a Sub in VBA in Excel (4 Examples)
- How to Return a Value in VBA Function (Both Array and Non-Array Values)