Вы находитесь на странице: 1из 88

Excel VBA Basics

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Outline
 Excel – Basic Elements
 Using Macros
 Excel VBA Basics
 Excel VBA Advanced

Ing. John Suarez


johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Excel Spreadsheet Example

Ing. John Suarez


johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Solution I

We have inserted
absolute constants
and invoked
AVERAGE excel
function

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
After update of cell “B2”
Can you see
anything wrong?

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Solution II – Using Cell
References

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Solution II – Using Cell
References

Now let‟s add


a constant
factor! “$A$8”

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Solution II – using Excel
Graphical User Interface

2. Click this
button
1. Select a
cell to be
updated

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Solution II – using Excel
Graphical User Interface
3. In the opened
dialogue select the
needed function

Ing. John Suarez


johnsuarezr@hotmail.com -
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”
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Finally,

Ing. John Suarez


johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Formatting Cells

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Formatting Cells – cont.

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Adding Graphs/Charts

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Outline
 Excel – Basic Elements
 Using Macros
 Excel VBA Basics
 Excel VBA Advanced

Ing. John Suarez


johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Recording a new Macro

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Recording a new Macro –
cont.

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Recording the new Macro –
cont.
Working with
Excel while
recording the
macro

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Finishing the Macro

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Running the Macro

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Running the Macro – cont.

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The Output!

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Looking inside the VB code of
our Macro

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
What does the row
mean???

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Guess what does this Macro
do? What is different now?

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Outline
 Excel – Basic Elements
 Using Macros
 Excel VBA Basics
 Excel VBA Advanced

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
VB example – “Hello World!”

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Running the Example

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The Output

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Creating User From

Ing. John Suarez


johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Ing. John Suarez
johnsuarezr@hotmail.com -
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 johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Do you
remember the
code?

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Running the code

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The Output!!

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Using Combo-Box

Select
The Combo-
Add Source of Box
range for the
combo-box

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Add Code to the Combo Box

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The output
after user
makes combo
box
selection

Ing. John Suarez


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Outline
 Excel – Basic Elements
 Using Macros
 Excel VBA Basics
 Excel VBA Advanced

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
“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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com - 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
johnsuarezr@hotmail.comare
- 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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
VBA Entities by Example
A Current
Workbook

A Cell

A Range
E2:E5

A current
Worksheet
Ing. John Suarez
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The Output Which Workbook was
Used?

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
The Output! How many times
the user will click
on the button?

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Referencing Cells with Offset –
cont.
ActiveCell.Offset( , 5) = 1

This is the
currently active
cell
The assignment
result

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Defining and Assigning a new
Object of type Range

Dim myRange as Range


Set myRange = Range(“A1:A10”)

Ing. John Suarez


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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


johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com -
twitter: @johnsuarezr -
997205589
Ing. John Suarez
johnsuarezr@hotmail.com -
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
johnsuarezr@hotmail.com
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,johnsuarezr@hotmail.com
and three VBA modules (only
- hardcopy)
twitter: @johnsuarezr -
997205589

Вам также может понравиться