Create custom functions in Excel (original) (raw)
Now you're ready to use the new DISCOUNT function. Close the Visual Basic Editor, select cell G7, and type the following:
=DISCOUNT(D7,E7)
Excel calculates the 10 percent discount on 200 units at 47.50perunitandreturns47.50 per unit and returns 47.50perunitandreturns950.00.
In the first line of your VBA code, Function DISCOUNT(quantity, price), you indicated that the DISCOUNT function requires two arguments, quantity and price. When you call the function in a worksheet cell, you must include those two arguments. In the formula =DISCOUNT(D7,E7), D7 is the quantity argument, and E7 is the price argument. Now you can copy the DISCOUNT formula to G8:G13 to get the results shown below.
Let's consider how Excel interprets this function procedure. When you press Enter, Excel looks for the name DISCOUNT in the current workbook and finds that it is a custom function in a VBA module. The argument names enclosed in parentheses, quantity and price, are placeholders for the values on which the calculation of the discount is based.
The If statement in the following block of code examines the quantity argument and determines whether the number of items sold is greater than or equal to 100:
`If quantity >= 100 Then DISCOUNT = quantity * price * 0.1 Else DISCOUNT = 0 End If
`
If the number of items sold is greater than or equal to 100, VBA executes the following statement, which multiplies the quantity value by the price value and then multiplies the result by 0.1:
Discount = quantity * price * 0.1
The result is stored as the variable Discount. A VBA statement that stores a value in a variable is called an assignment statement, because it evaluates the expression on the right side of the equal sign and assigns the result to the variable name on the left. Because the variable Discount has the same name as the function procedure, the value stored in the variable is returned to the worksheet formula that called the DISCOUNT function.
If quantity is less than 100, VBA executes the following statement:
Discount = 0
Finally, the following statement rounds the value assigned to the Discount variable to two decimal places:
Discount = Application.Round(Discount, 2)
VBA has no ROUND function, but Excel does. Therefore, to use ROUND in this statement, you tell VBA to look for the Round method (function) in the Application object (Excel). You do that by adding the word Application before the word Round. Use this syntax whenever you need to access an Excel function from a VBA module.