2. SUMMARY
Range objects
Obtaining a range using the RefEdit control
User-Defined Functions
Without arguments
With arguments
Variables, constants, arrays and range objects
4. 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.
5. 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”)
6. 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
8. 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
9. 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)
11. 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
12. 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
13. 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
14. 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
18. 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
19. 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.
20. 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?
39. 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
40. 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()
42. 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
43. 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
45. 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
46. 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
47. 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
48. 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.
49. 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.