Excel VBA Basics
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Outline
Excel – Basic Elements
Using Macros
Excel VBA Basics
Excel VBA Advanced
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Excel – Basic Elements
Column - characters
Each Row is uniquely designate
designated by each column.
integer number
Cell – intersection of
row and column.
In the example the
ID of the cell: B4
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Excel Basic Data Types
Label – anything that is just a text
My daughter is 3 years old!
Constant – any type of number
50%, 3.5, 775$, 10, -7.8
Formula – any math equation, always
starts with an equal sign “=”
=5+3, =45*7-3
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Excel Spreadsheet Example
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using Formulas in Excel
Assignment:
Suppose, we have a class of four students
and we need to calculate an average of the
three assignments they had for each one of
them. Given the following spreadsheet:
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution I
We have inserted
absolute constants
and invoked
AVERAGE excel
function
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
After update of cell “B2”
Can you see
anything wrong?
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution II – Using Cell
References
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution II – Using Cell
References
Now let‟s add
a constant
factor! “$A$8”
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Now let‟s continue the
calculations… - using “copy”
Select cell E2 and click
<Ctrl> + C
Starting from E3 and till
E5 drag the mouse and
select the needed group
of cells
Press <Ctrl> + P
That is all! Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution II – using Excel
Graphical User Interface
2. Click this
button
1. Select a
cell to be
updated
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution II – using Excel
Graphical User Interface
3. In the opened
dialogue select the
needed function
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Solution II – using Excel
Graphical User Interface
5.Then with
mouse select the
needed cells
4. Go with
mouse to the
first argument
(here Number1)
See how we refer
to a range!
6. Finally
Ing. John Suarez click “OK”
[email protected] -
twitter: @johnsuarezr -
997205589
Finally,
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using “If” Expression in Excel
=If(A2>1,”Yes”,”No”)
If it is true that the value in the cell A2
is greater then 1, then the value of
current cell is “Yes”
Otherwise (else), the value is “No”
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using “Sin/Cos/Tan”
Expression in Excel
Sin, Cos, Tan formats:
for degrees formula “= sin (angle *
pi()/180)”, the argument angle is in
degrees
for radians formula “= sin (angle)”, the
argument angle is in radians
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Formatting Cells
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Formatting Cells – cont.
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Adding Graphs/Charts
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Outline
Excel – Basic Elements
Using Macros
Excel VBA Basics
Excel VBA Advanced
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using Macros
Now let‟s create a simple macro that
formats a single cell
Changes its background
Changes its font
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Recording a new Macro
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Recording a new Macro –
cont.
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Recording the new Macro –
cont.
Working with
Excel while
recording the
macro
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Finishing the Macro
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Running the Macro
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Running the Macro – cont.
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Output!
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Looking inside the VB code of
our Macro
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
What does the row
mean???
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Guess what does this Macro
do? What is different now?
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Outline
Excel – Basic Elements
Using Macros
Excel VBA Basics
Excel VBA Advanced
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VB example – “Hello World!”
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Running the Example
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Output
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Creating User From
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using Toolbox
This is a label
This is a button
Using the Toolbox
select a GUI
element and by
mouse-click place it
on the frame
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Adding Code to the Button
In the open
Window fill-in
the function
•The name of the method was automatically generated
•CommandButton1 – is the name of the button object
•Click – type of the event of the object
•The method will be invoked whenever
Ing. Johnuser clicks on the CommandButton1
Suarez
button
[email protected] -
twitter: @johnsuarezr -
997205589
Do you
remember the
code?
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Running the code
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Output!!
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using Combo-Box
Select
The Combo-
Add Source of Box
range for the
combo-box
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Add Code to the Combo Box
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The output
after user
makes combo
box
selection
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Outline
Excel – Basic Elements
Using Macros
Excel VBA Basics
Excel VBA Advanced
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Modules & Procedures
Module – collection of logically related
procedures grouped together
Procedure – a group of ordered
statements enclosed by Sub and End
Sub
Function – the same as a procedure, but
also returns some value and is closed
between Function and
Ing. End Function
John Suarez
[email protected] -
key words twitter: @johnsuarezr -
997205589
Procedure & Function
Examples
The procedure places
the current time
Sub ShowTime inside cell C1
Range("C1") = Now
End Sub
The function returns sum
Function sumNo(x, y) of two input numbers,
sumNo = x + y whose values are in the
parameter variables x &
End Function y
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Calling procedures vs. calling
If there are few
functions sumNo functions,
the full name of
the function is
needed
Sub z(a) Sub ShowSum()
MsgBox a
MsgBox _
End Sub
Module1.sumNo(3,5)
Sub x() End Sub
Call z("ABC")
End Sub
Function sumNo(x, y)
sumNo = x + y
Sub y()
z "ABC“ End Function
End Sub Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Passing Arguments by Value
or by Reference
Passing arguments by reference –
Is the VBA default
Means, if any changes happened to the argument
variables, they will be preserved after the
function/procedure finishes
Passing arguments by value –
Is possible in VBA (by explicit definition)
Means, the pre-calling state of the argument
variables will be preserved after the
procedure/function finishes
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Arguments by Ref/by Val.
Examples
Sub TestPassing1() public Sub TestPassing2()
Dim y As Integer Dim y As Integer
y = 50 y = 50
AddNo1 y AddNo3 y
MsgBox y
AddNo2 y MsgBox y
MsgBox y End Sub
End Sub
private Sub AddNo3(ByVal x _
Sub AddNo1(ByRef x As Integer) As Integer)
x = x + 10 x = x + 10
End Sub End Sub
Sub AddNo2(x As Integer)
x = x + 10
End Sub Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Functions/Procedure Scope
Use public to allow any module to call
the function/procedure
Use private to make limited access to
the function/procedure (only from the
owning module)
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Variables
A variable is used to store temporary
information within a Procedure, Module…
A variable name
Must start with letter and can‟t contain spaces and
special characters (such as “&”, “%”, “\”)
Can‟t be any excel keyword (“if”, “while”…)
Can‟t have identical name to any existing class
(“Wroksheet”, “Workbook”…)
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Data Type
Byte – positive integer numbers (0:255)
Integer – integers (-32,768 : 32,767)
Long – 4-byte integer
Currency – for fixed-point calculations
Single – 2-byte floating-point numbers
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Data Type
Double – double-precision floating-point
numbers
Date – used to store dates and times as
real numbers.
String – contains a sequence of
characters
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Variables Advantage by
Example In VB the end of
statement is in the end of
line.
To write the same
Sub NoVariable()
statement in few lines
use “_” at the end of line! Sub WithVariable() Dim _
Range("A1").Value = _ iValue as Integer
Range("B2").Value iValue = _
Range("A2").Value = _ Range("B2").Value
Range("B2").Value * 2 Range("A1").Value = _
Range("A3").Value = _ iValue
Range("B2").Value * 4 Range("A2").Value = _
Range("B2").Value = _ iValue * 2
Range("B2").Value * 5 Range("A3").Value = _
End Sub iValue * 4
Range("B2").Value = _
iValue * 5
End Sub
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Using Variables
Declaring Variables
Format: Dim varibaleName AS dataType
Examples:
Dim myText As String
Dim myNum As Integer
Dim myObj As Range
The default value of
any numeric variable is zero
any string variable – “” (empty string)
an Object variable – is nothing (still
Ing. John the declaration will store
Suarez
[email protected] -
space for the object!!!) twitter: @johnsuarezr -
997205589
Variant “Data Type”
In VB you don‟t have to declare variable before its
usage
Then, VB will by itself declare such variable as “Variant”
You can also declare variable as “Variant”
Dim myVar as Variant
Variant – means that the variable may contain any
data type
The price is very high!!! – any time VB access such
variable, it will spend time Ing.on
John“deciding”
Suarez what is its
[email protected] -
“current” type! twitter: @johnsuarezr -
997205589
Variables Assignment
To assign a value to a Numeric or String
type Variable, you simply use your
Variable name, followed by the equals
sign (=) and then the String or Numeric
To assign an Object to an Object type
variable you must use the key word "Set"
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Variables Assignment – cont.
Sub ParseValue
Dim sWord as String
Dim iNumber as Integer
Dim rCell as Range
Set rCell = Range("A1")
sWord = Range("A1").Text
iNumber = Range("A1").Value
End Sub
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Variables Scope &
Lifecycle
The scope & lifecycle of a variable defines the code where the variable
can be accessed and time when the stored data is kept inside the
variable
Procedure-Level
Variables defined inside procedures
Can be accessed only inside the procedure and keep their data until the
End statement of the procedure
Module-Level
Defined in the top of a Module
Any procedure inside the Module can access the variable
The variable retains the values unless the Workbook closes
Project-Level, Workbook Level, or Public Module-Level
Defined as “Public” in the top of a Module
Can be accesses by any procedure in any module
Ing. John Suarez
The variable retains the values unless the Workbook
[email protected] - closes
twitter: @johnsuarezr -
997205589
VBA Variables Scope &
Lifecycle – cont.
Sub scopeExample()
Dim x as Integer Procedure level variables
x=5
End Sub
Dim y as Integer Module level variables
„all the module procedures are here…
Public z as Integer Project level variables
„all the module procedures
Ing. John Suarez
[email protected] - here…
twitter: @johnsuarezr -
997205589
Basic Excel Classes
Workbook: the class represents an
Excel file
Worksheet: represents a single
worksheet
Sheet: represents a single worksheet or
chartsheet
Cell: represents a single cell
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Entities by Example
A Current
Workbook
A Cell
A Range
E2:E5
A current
Worksheet
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Excel Containers
Workbooks: a collection of objects of
class “Workbook”
Worksheets: a collection of objects of
class “Worksheet”
Sheets: a collection of Sheet objects
Range: a range of objects of class Cell
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Referencing the Objects -
Examples This will take the
whole square
between the two
cells
Sub Test1()
Worksheets("Sheet1").Range("A10", "B12") =
"Hello“
Worksheets(1).Range("A13,B14") = "World!"
End Sub
Two equal ways to The range of two
refer Sheet1 cells
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Output Which Workbook was
Used?
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
What does this procedure do?
Sub ShowWorkSheets
Dim mySheet As Worksheet
For Each mySheet In Worksheets
MsgBox mySheet.Name
Next mySheet
End Sub
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
The Output! How many times
the user will click
on the button?
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Referencing Cells
Cells indexing format:
Cells(row, column), where both row and column
are given as integers (starting from 1)
Cells(index) – see the next slide
Following expressions are equivalent and
refer to the cell A1 in the currently active
sheet:
ActiveSheet.Range.Cells(1,1)
Range.Cells(1,1)
Cells(1,1)
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Referencing Cells with Offset
See how we
calculate cell 12
In the given
Range(“B1:F5”).Cells(12) = “XYZ” range!
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Referencing Cells with Offset –
cont.
ActiveCell.Offset( , 5) = 1
This is the
currently active
cell
The assignment
result
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Few methods/properties of
Excel Classes
Workbooks.Close – closes the active
workbook
Workbooks.Count – returns the number of
currently open workbooks
Range(“A1”) is the same as
Range(“A1”).Value
Worksheets(1).Column(“A:B”).AutoFit
Worksheets(1).Range(“A1:A10”).Sort_
Workbooks.Open fileName:=“Hello.xls”,
password:=“kukuriku”
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Defining and Assigning a new
Object of type Range
Dim myRange as Range
Set myRange = Range(“A1:A10”)
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Arrays
Suppose, we want to keep a collection
of all the books that we loan,
Or we want to keep lists of tasks for all
the days of the week
The naïve solution is to keep a lot of
variables
Another solution is to create array keeping
the whole collection together
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Declaring object of type Array
The array declaration.
The size must be defined
here!
Dim LoanBooks(3)
LoanBooks(1) = “Winnie The Pooh”
LoanBooks(2) = “Adventures of Huckleberry Finn”
LoanBook(3) = “Frankenstein”
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Multidimensional Arrays
Dim WeekTasks(7,2)
WeekTasks(1,1) = “To buy milk”
WeekTasks(7,1) = “To dance” What will the
… code print?
MsgBox WeekTasks(1,1) & ” ” & WeekTasks(1,2) _
& vbCrLf & WeekTasks(2,1)…
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Resizing the Arrays
There are two ways to resize the
existing array:
ReDim LoanBooks(7) – will erase the old
values
ReDim Preserve LoanBooks(7) – will
preserve values in indexes 1-3
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Upper & Lower Index Bounds
of an Array
Dim A(1 To 100, 0 To 3, -3 To 4)
UBound(A, 1) – will return “100”
UBound(A, 2) – will return “3”
UBound(A, 3) – will return “4”
LBound(A, 1) – will return “1”
LBound(A, 2) – will return “0”
LBound(A, 3) – will return “-3”
Write code calculating the size of each
Ing. John Suarez
one of the sub-arrays
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Control Structures - If
If Age >= 18 Then Status = "Adult" End If
If Age >=18
Then
Status = “Adult”
Vote = “Yes”
Else
Status = “Child”
Vote = “No”
End If
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Control Structures - If
If Age >= 18
Then MsgBox "You can vote
ElseIf Age >=22 and Age < 62
Then MsgBox “You can drive”
End If
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Control Structures –
Select
Select Case Grade
Case Is >= 90
LetterGrade = "A"
Case Is >= 80
LetterGrade = "B"
Case Is >= 70
LetterGrade = "C"
Case Is >= 60
LetterGrade = "D"
Case Else
LetterGrade = “E"
End Select
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
VBA Control Structures –
Loops
For i = 10 to 1 Step -2
Cells(i, 1) = “AB”
Next i
i=
Do While i =< 10
Cells(i, 1) = i
i=i+1
Loop
i=1
Do
Cells(i, 1) = i
i =i+1
Loop While i < 11
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Test yourself!
What does the procedure do?
Sub CellsExample
For i = 1 To 5
For j = 1 To 5
Cells(i, j) = "Row " & i & " Col " & j
Next j
Next i
End Sub
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
Ing. John Suarez
[email protected] -
twitter: @johnsuarezr -
997205589
References
http://www.usd.edu/trio/tut/excel/13.html
Tutorial on Excel
http://www.anthony-
vba.kefra.com/index_011.htm
Great place to learn VBA basics!
http://msdn.microsoft.com/en-
us/library/aa224506(office.11).aspx
MSDN online help, a good place to learn about Excel
classes (their data and functions set) -
Ing. John Suarez
[email protected]
twitter: @johnsuarezr -
997205589
Assignment #1
Create Excel file with grades
The data:
There are 4 students with ids & names
There are 4 assignments and two exams
Each student has grades for each one of the assignments and exams, the grades are
from 20 to 100
Some cell in the worksheet keeps factor of 10
Create VBA module that will calculate final grade for every student and
places it in the new column allocated to keep the final grade
20% for the assignments average and 80% - for the maximal grade of the two exams
plus factor
If the grade becomes higher than 100 – it should be 100
Create VBA that accepts a column name from user and sorts the whole file
according to the given column
Create VBA that adds additional column with grades translated to A, B, C,
D, E, F.
Next week in class I will collect your
Ing.solutions
John Suarez
You should submit Excel file,[email protected]
and three VBA modules (only
- hardcopy)
twitter: @johnsuarezr -
997205589