LECTURE 9

Range objects
User-Defined
Functions
SUMMARY
Range objects
Obtaining a range using the RefEdit control
User-Defined Functions
 Without arguments

 With arguments
 Variables, constants, arrays and range objects
RANGE OBJECTS

A cross
between a
named range
and an array
RANGE OBJECTS
Range objects are an alternative to using arrays
and named ranges.

Range objects are preferred when:
 You are using the RefEdit control to allow users to select
data for a program.
 You are creating user defined functions which you want to
use within Excel worksheets (as opposed to using them
solely within your code).
 You are creating an Excel add-in and don’t want to clog up
the user’s workbook with range names.
DECLARING A RANGE OBJECT
A Range is a data type. So we declare a range
object as:
Dim rangeObj as Range
 Where rangeObj is the name you want to assign to the
range object

Assign a range object a range within a procedure:
Set rangeObj = Range

Set rangeObj = Range(“RangeName”)

 Where Range is a range in Excel and RangeName is a
named range in Excel.

 For example,
Set stockRange = Range(Cells(1,1), Cells(1,25))
Set stockRange = Range(“StockPrices”)
METHODS APPLIED TO RANGE OJBECTS
You can do nearly everything the same as a range
or named range in Excel. For example:
 Count rows or columns
rangeObj.Rows.Count

rangeObj.Columns.Count

 Refer to cells within the range
rangeObj.Cells(i, j).Value
REFEDIT CONTROL

Letting the
user select
the range of
data
REFEDIT
RefEdit is a UserForm control:

Allows user to select a range in Excel
Set this selection as a range object in your code
Set rangeObj = Range(RefEdit.Value)

 Where RefEdit is the (Name) of the control

Then use the range however you need to
 In a built-in function
 In a user defined function
 In place of a named range
EXERCISE 1. REFEDIT
Open Lecture 9 Student Example.xlsm
Open UserForm2
In the sub for the command button code the
following:
 Declare a range object called userSelect
 Set this range object equal to the value of the RefEdit
control
 Test that the works by outputting the range object to some
cells
 Use the .Columns.Count and .Rows.Count property to assist you
 Start the output in Cells(1,6) of Sheet 1
 Remember, to ‘copy’ or ‘output’ you just need to set the two
ranges equal to each other
 (make sure to put .Value at the end of each range)
USER DEFINED
FUNCTIONS

Create a
function in
VBA
WHAT IS A USER DEFINED FUNCTION?
Designed/created by YOU, the USER
 Similar to an Excel built-in function

Returns a value: number, text, True/False
Always goes into a Module

(not a UserForm module)

 Private Function – Only used in the module it’s in
 Public Function – Used in any module or in Excel

Can be executed in two ways:
 Called from within a Sub Procedure in VBA, OR
 Used from an Excel worksheet:
 Click on a cell, type =, then the name of your function
FUNCTION DOS AND DON’TS
Functions only do calculations
Functions DO NOT output to cells or userforms
 Do not put commands to write to cells in your function
 Do not put commands to write to userform controls in your
function

A Sub procedure performs a series of actions
 Call your function from a Sub and write the result to cells
or userforms from your Sub
ARGUMENT . AN EXAMPLE USING THE SUM FUNCTION.

This is called the ARGUMENT.
 Apply an operation to the argument and output the result
 For SUM(), it specifies what this function should sum
 In this case, we are specifying an array/range

User defined functions can have arguments too
ARGUMENT . WHEN IS IT NEEDED?
 The function operates on an argument to return a
value.

1 or more numbers

1 or more arrays/ranges

1 number

 Some functions can return a value without
operating on a variable.
NO argument needed
EXAMPLE 1. MULTIPLY 2 NUMBERS
Remember
Functions go in Modules!
EXAMPLE 1. MULTIPLY 2 NUMBERS
Requires 2 variables as the argument
(because I want it to multiply 2 numbers together)
I’ve named them x & y
EXAMPLE 1. MULTIPLY 2 NUMBERS

MUST assign each argument a data type
EXAMPLE 1. MULTIPLY 2 NUMBERS
The Function itself MUST be assigned a value
WITHIN the Function
If you don’t, it will NOT return a value
USE YOUR FUNCTION IN EXCEL
Use your function like a built-in Excel function
• Type = then the name of the
User-Defined function.
• Select the function from the
list.

• Select/Enter the arguments.
• Separate the arguments
with a comma.
EXERCISE 2. CREATE AN ADD FUNCTION
Open Lecture 9 Student Example.xlsm
Open Module1
Insert a function called Add2numbers
 Give this function 2 arguments, x and y
 Write code so that this function adds the value of x and y

Test your code in an Excel worksheet – does it
work?
CALLING FUNCTIONS FROM A SUB
CALLING FUNCTIONS FROM A SUB
CALLING FUNCTIONS FROM A SUB

The name of the
Function
CALLING FUNCTIONS FROM A SUB

This function
needs 2
arguments.
CALLING FUNCTIONS FROM A SUB
CALLING FUNCTIONS FROM A SUB

The name of the
Function
CALLING FUNCTIONS FROM A SUB

This function
needs 2
arguments.
EXERCISE 3. CALLING FUNCTIONS

Type this code and run the
UserForm.
Does it work (numbers only)?
FUNCTIONS USING ARRAYS
EXAMPLE 2. AVERAGE OF AN ARRAY

The name of
the Function
EXAMPLE 2. AVERAGE OF AN ARRAY

The argument
is an array

Any array we send to
this function will be
called array1 within
the function
EXAMPLE 2. AVERAGE OF AN ARRAY

The number of rows
in array1() is not
known in the function

Ubound(array1) returns the
number of rows in array1
EXAMPLE 2. AVERAGE OF AN ARRAY

The Function is
given a value
within the
Function
EXAMPLE 2. AVERAGE OF AN ARRAY
We can’t use it like a built-in function because the
argument is an array.

Call it from a Sub procedure
CALL A FUNCTION FROM A PROCEDURE
CALL A FUNCTION FROM A PROCEDURE
CALL A FUNCTION FROM A PROCEDURE
CALL A FUNCTION FROM A PROCEDURE
FUNCTION

V

SUB

PROCEDURE

Function procedures
 Used to return a value

Sub procedures
 Use to run a series of commands
 Does NOT return a value

For example,
 If you want to output the result of a calculation in a cell
 Do the calculation in a function
 In a Sub Procedure, output that function to a cel l

Let the cells =
the value of the
function within
the Sub
EXERCISE 4. FUNCTIONS USING ARRAYS
Open Module2
Insert a function called AverageArray2D
Inside this function write code to find the average
of a 2D array.
 You can start with the code for the 1D array and just
modify it.
 The code to calculate the number of columns in an array is
UBound(arrayName, 2)
 Recall the code to calculate the number of rows in a array is
Ubound(arrayName)

 To check that your code works,
 modify Sub MainSub() so that you read in a 2D array from Excel
(use the first 2 or 3 columns – it’s up to you)
 Output AverageArray2D from a MsgBox in Sub MainSub()
FUNCTIONS USING
RANGE OBJECTS
EXAMPLE 3. SUM A RANGE OBJECT
Insert a function called SumOfRange
In this function add together all elements of the
range:
Range object
Count the number of rows
and cols for the loops

Use a nested loop
because you have rows
and columns of data

Use .Cells() just like
with a named range

Test this function in an Excel Worksheet
EXERCISE 5. FUNCTIONS USING RANGES
Open Module2
Insert a function called AverageOfRange
 Write code to calculate the average
 All you really need to do is modify one of your previous functions

Test your function in Excel – make sure it works
CALLING PROCEDURES
CALLING A SUB FROM WITHIN ANOTHER SUB
Very similar to calling a Function
Just write Call followed by the name of the Sub

For Example
If I had a Sub Procedure called EnableControls()
and wanted to call it from within a different Sub,
I’d write:
Call EnableControls

If the sub has arguments, then write them in
brackets, just like for a function
USING SUB PROCEDURES
Use Sub procedures for
 Tasks you want to repeat in your code

For Example
Enable textboxes
Call this sub from within another procedure
USING SUB PROCEDURES
Use Sub procedures for
 Tasks you want to repeat in your code
 Breaking a large chunk of code into smaller bits

For Example
USING SUB PROCEDURES
Use Sub procedures for
 Tasks you want to repeat in your code
 Breaking a large chunk of code into smaller bits

Using Subs in this way is ‘good practice’, but not
obligatory.
LEARNING OUTCOMES
You are ready to move on when…
 LO35: You can declare and assign a range to a range object.
You also understand when and why a range object would
be used in place of a named range or array.
 LO36: You can describe what the RefEdit tool is used for. In
addition, you can assign the value of the RefEdit tool to a
range object.
 LO37: You can describe the difference between a Sub
procedure and Function procedure. Further, you can
define what arguments are in relation to functions.
 LO38: You can write and read functions with and without
arguments (to a reasonable standard). In addition, for
functions with arguments you understand the difference
between using an array, variable or range object and can
apply that knowledge in practice.
THE END

MA3696 Lecture 9

  • 1.
  • 2.
    SUMMARY Range objects Obtaining arange using the RefEdit control User-Defined Functions  Without arguments  With arguments  Variables, constants, arrays and range objects
  • 3.
    RANGE OBJECTS A cross betweena named range and an array
  • 4.
    RANGE OBJECTS Range objectsare an alternative to using arrays and named ranges. Range objects are preferred when:  You are using the RefEdit control to allow users to select data for a program.  You are creating user defined functions which you want to use within Excel worksheets (as opposed to using them solely within your code).  You are creating an Excel add-in and don’t want to clog up the user’s workbook with range names.
  • 5.
    DECLARING A RANGEOBJECT A Range is a data type. So we declare a range object as: Dim rangeObj as Range  Where rangeObj is the name you want to assign to the range object Assign a range object a range within a procedure: Set rangeObj = Range Set rangeObj = Range(“RangeName”)  Where Range is a range in Excel and RangeName is a named range in Excel.  For example, Set stockRange = Range(Cells(1,1), Cells(1,25)) Set stockRange = Range(“StockPrices”)
  • 6.
    METHODS APPLIED TORANGE OJBECTS You can do nearly everything the same as a range or named range in Excel. For example:  Count rows or columns rangeObj.Rows.Count rangeObj.Columns.Count  Refer to cells within the range rangeObj.Cells(i, j).Value
  • 7.
    REFEDIT CONTROL Letting the userselect the range of data
  • 8.
    REFEDIT RefEdit is aUserForm control: Allows user to select a range in Excel Set this selection as a range object in your code Set rangeObj = Range(RefEdit.Value)  Where RefEdit is the (Name) of the control Then use the range however you need to  In a built-in function  In a user defined function  In place of a named range
  • 9.
    EXERCISE 1. REFEDIT OpenLecture 9 Student Example.xlsm Open UserForm2 In the sub for the command button code the following:  Declare a range object called userSelect  Set this range object equal to the value of the RefEdit control  Test that the works by outputting the range object to some cells  Use the .Columns.Count and .Rows.Count property to assist you  Start the output in Cells(1,6) of Sheet 1  Remember, to ‘copy’ or ‘output’ you just need to set the two ranges equal to each other  (make sure to put .Value at the end of each range)
  • 10.
  • 11.
    WHAT IS AUSER DEFINED FUNCTION? Designed/created by YOU, the USER  Similar to an Excel built-in function Returns a value: number, text, True/False Always goes into a Module (not a UserForm module)  Private Function – Only used in the module it’s in  Public Function – Used in any module or in Excel Can be executed in two ways:  Called from within a Sub Procedure in VBA, OR  Used from an Excel worksheet:  Click on a cell, type =, then the name of your function
  • 12.
    FUNCTION DOS ANDDON’TS Functions only do calculations Functions DO NOT output to cells or userforms  Do not put commands to write to cells in your function  Do not put commands to write to userform controls in your function A Sub procedure performs a series of actions  Call your function from a Sub and write the result to cells or userforms from your Sub
  • 13.
    ARGUMENT . ANEXAMPLE USING THE SUM FUNCTION. This is called the ARGUMENT.  Apply an operation to the argument and output the result  For SUM(), it specifies what this function should sum  In this case, we are specifying an array/range User defined functions can have arguments too
  • 14.
    ARGUMENT . WHENIS IT NEEDED?  The function operates on an argument to return a value. 1 or more numbers 1 or more arrays/ranges 1 number  Some functions can return a value without operating on a variable. NO argument needed
  • 15.
    EXAMPLE 1. MULTIPLY2 NUMBERS Remember Functions go in Modules!
  • 16.
    EXAMPLE 1. MULTIPLY2 NUMBERS Requires 2 variables as the argument (because I want it to multiply 2 numbers together) I’ve named them x & y
  • 17.
    EXAMPLE 1. MULTIPLY2 NUMBERS MUST assign each argument a data type
  • 18.
    EXAMPLE 1. MULTIPLY2 NUMBERS The Function itself MUST be assigned a value WITHIN the Function If you don’t, it will NOT return a value
  • 19.
    USE YOUR FUNCTIONIN EXCEL Use your function like a built-in Excel function • Type = then the name of the User-Defined function. • Select the function from the list. • Select/Enter the arguments. • Separate the arguments with a comma.
  • 20.
    EXERCISE 2. CREATEAN ADD FUNCTION Open Lecture 9 Student Example.xlsm Open Module1 Insert a function called Add2numbers  Give this function 2 arguments, x and y  Write code so that this function adds the value of x and y Test your code in an Excel worksheet – does it work?
  • 21.
  • 22.
  • 23.
    CALLING FUNCTIONS FROMA SUB The name of the Function
  • 24.
    CALLING FUNCTIONS FROMA SUB This function needs 2 arguments.
  • 25.
  • 26.
    CALLING FUNCTIONS FROMA SUB The name of the Function
  • 27.
    CALLING FUNCTIONS FROMA SUB This function needs 2 arguments.
  • 28.
    EXERCISE 3. CALLINGFUNCTIONS Type this code and run the UserForm. Does it work (numbers only)?
  • 29.
  • 30.
    EXAMPLE 2. AVERAGEOF AN ARRAY The name of the Function
  • 31.
    EXAMPLE 2. AVERAGEOF AN ARRAY The argument is an array Any array we send to this function will be called array1 within the function
  • 32.
    EXAMPLE 2. AVERAGEOF AN ARRAY The number of rows in array1() is not known in the function Ubound(array1) returns the number of rows in array1
  • 33.
    EXAMPLE 2. AVERAGEOF AN ARRAY The Function is given a value within the Function
  • 34.
    EXAMPLE 2. AVERAGEOF AN ARRAY We can’t use it like a built-in function because the argument is an array. Call it from a Sub procedure
  • 35.
    CALL A FUNCTIONFROM A PROCEDURE
  • 36.
    CALL A FUNCTIONFROM A PROCEDURE
  • 37.
    CALL A FUNCTIONFROM A PROCEDURE
  • 38.
    CALL A FUNCTIONFROM A PROCEDURE
  • 39.
    FUNCTION V SUB PROCEDURE Function procedures  Usedto return a value Sub procedures  Use to run a series of commands  Does NOT return a value For example,  If you want to output the result of a calculation in a cell  Do the calculation in a function  In a Sub Procedure, output that function to a cel l Let the cells = the value of the function within the Sub
  • 40.
    EXERCISE 4. FUNCTIONSUSING ARRAYS Open Module2 Insert a function called AverageArray2D Inside this function write code to find the average of a 2D array.  You can start with the code for the 1D array and just modify it.  The code to calculate the number of columns in an array is UBound(arrayName, 2)  Recall the code to calculate the number of rows in a array is Ubound(arrayName)  To check that your code works,  modify Sub MainSub() so that you read in a 2D array from Excel (use the first 2 or 3 columns – it’s up to you)  Output AverageArray2D from a MsgBox in Sub MainSub()
  • 41.
  • 42.
    EXAMPLE 3. SUMA RANGE OBJECT Insert a function called SumOfRange In this function add together all elements of the range: Range object Count the number of rows and cols for the loops Use a nested loop because you have rows and columns of data Use .Cells() just like with a named range Test this function in an Excel Worksheet
  • 43.
    EXERCISE 5. FUNCTIONSUSING RANGES Open Module2 Insert a function called AverageOfRange  Write code to calculate the average  All you really need to do is modify one of your previous functions Test your function in Excel – make sure it works
  • 44.
  • 45.
    CALLING A SUBFROM WITHIN ANOTHER SUB Very similar to calling a Function Just write Call followed by the name of the Sub For Example If I had a Sub Procedure called EnableControls() and wanted to call it from within a different Sub, I’d write: Call EnableControls If the sub has arguments, then write them in brackets, just like for a function
  • 46.
    USING SUB PROCEDURES UseSub procedures for  Tasks you want to repeat in your code For Example Enable textboxes Call this sub from within another procedure
  • 47.
    USING SUB PROCEDURES UseSub procedures for  Tasks you want to repeat in your code  Breaking a large chunk of code into smaller bits For Example
  • 48.
    USING SUB PROCEDURES UseSub procedures for  Tasks you want to repeat in your code  Breaking a large chunk of code into smaller bits Using Subs in this way is ‘good practice’, but not obligatory.
  • 49.
    LEARNING OUTCOMES You areready to move on when…  LO35: You can declare and assign a range to a range object. You also understand when and why a range object would be used in place of a named range or array.  LO36: You can describe what the RefEdit tool is used for. In addition, you can assign the value of the RefEdit tool to a range object.  LO37: You can describe the difference between a Sub procedure and Function procedure. Further, you can define what arguments are in relation to functions.  LO38: You can write and read functions with and without arguments (to a reasonable standard). In addition, for functions with arguments you understand the difference between using an array, variable or range object and can apply that knowledge in practice.
  • 50.