Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 88

Excel VBA Basics

Outline

Excel Basic Elements


Using Macros
Excel VBA Basics
Excel VBA Advanced

Excel Basic Elements


Each Row is
designated by
integer number

Cell intersection
.of row and column
In the example the
ID of the cell: B4

Column - characters
uniquely designate
. each column

Excel Basic Data Types

Label anything that is just a text

Constant any type of number

My daughter is 3 years old!


50%, 3.5, 775$, 10, -7.8

Formula any math equation,


always starts with an equal sign =

=5+3, =45*7-3

Excel Spreadsheet
Example

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:

Solution I
We have inserted
absolute
constants and
invoked AVERAGE
excel function

After update of cell B2


Can you see
anything
?wrong

Solution II Using Cell


References

Solution II Using Cell


References
Now lets add
a constant
factor!
$A$8

Now lets 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!

Solution II using Excel


Graphical User Interface
Click this. 2
button

Select a. 1
cell to be
updated

Solution II using Excel


Graphical User Interface
In the opened. 3
dialogue select
the needed
function

Solution II using Excel


Graphical User Interface
Then with.5
mouse select
the needed cells

Go with. 4
mouse to the
first argument
(here
Number1)

See how we
refer to a
!range
Finally. 6
click OK

,Finally

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

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

Formatting Cells

.Formatting Cells cont

Adding Graphs/Charts

Outline

Excel Basic Elements


Using Macros
Excel VBA Basics
Excel VBA Advanced

Using Macros

Now lets create a simple macro


that formats a single cell

Changes its background


Changes its font

Recording a new Macro

Recording a new Macro


.cont

Recording the new Macro


.cont
Working
with Excel
while
recording
the macro

Finishing the Macro

Running the Macro

.Running the Macro cont

!The Output

Looking inside the VB code


of our Macro

What does the


???row mean

Guess what does this


Macro do? What is
?different now

Outline

Excel Basic Elements


Using Macros
Excel VBA Basics
Excel VBA Advanced

VB example Hello
!World

Running the Example

The Output

Creating User From

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

Adding Code to the Button


In the open
Window fillin 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 user clicks on the CommandBu
button

Do you
remember
?the code

Running the code

!!The Output

Using Combo-Box

Add Source of
range for the
combo-box

Select
The ComboBox

Add Code to the Combo


Box

The output
after user
makes
combo box
selection

Outline

Excel Basic Elements


Using Macros
Excel VBA Basics
Excel VBA Advanced

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 End
Function key words

Procedure & Function


Examples
Sub ShowTime()
Range("C1") = Now()
End Sub
Function sumNo(x, y)
sumNo = x + y
End Function

The procedure
places the current
time inside cell C1

The function returns


sum of two input
numbers, whose
values are in the
parameter variables x
&y

Calling procedures vs. calling


If there are few
sumNo
functions
functions, the
Sub z(a)
MsgBox a
End Sub
Sub x()
Call z("ABC")
End Sub
Sub y()
z "ABC
End Sub

full name of the


function is
needed

Sub ShowSum()
MsgBox _
Module1.sumNo(3,5
)
End Sub
Function sumNo(x, y)
sumNo = x + y
End Function

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

Arguments by Ref/by Val.


Examples
Sub TestPassing1()
Dim y As Integer
y = 50
AddNo1 y
MsgBox y
AddNo2 y
MsgBox y
End Sub
Sub AddNo1(ByRef x As
Integer)
x = x + 10
End Sub
Sub AddNo2(x As Integer)
x = x + 10
End Sub

public Sub TestPassing2()


Dim y As Integer
y = 50
AddNo3 y
MsgBox y
End Sub
private Sub AddNo3(ByVal
x _ As Integer)
x = x + 10
End Sub

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)

VBA Variables

A variable is used to store temporary


information within a Procedure, Module
A variable name

Must start with letter and cant contain


spaces and special characters (such as &,
%, \)
Cant be any excel keyword (if, while)
Cant have identical name to any existing
class (Wroksheet, Workbook)

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

VBA Data Type

Double double-precision floatingpoint numbers


Date used to store dates and
times as real numbers.
String contains a sequence of
characters

The Variables Advantage


by Example
In VB the end of
statement is in the
.end of line
To write the same
statement in few lines
use _ at the end of
!line

Sub NoVariable()
Range("A1").Value = _
Range("B2").Value
Range("A2").Value = _
Range("B2").Value * 2
Range("A3").Value = _
Range("B2").Value * 4
Range("B2").Value = _
Range("B2").Value * 5
End Sub

Sub WithVariable()
Dim _ iValue as Integer
iValue = _
Range("B2").Value
Range("A1").Value = _
iValue
Range("A2").Value = _
iValue * 2
Range("A3").Value = _
iValue * 4
Range("B2").Value = _
iValue * 5
End Sub

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 the declaration will
store space for the object!!!)

Variant Data Type

In VB you dont have to declare variable before


its usage

You can also declare variable as Variant

Then, VB will by itself declare such 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 on deciding what is its
current type!

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"

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

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

Module-Level

Variables defined inside procedures


Can be accessed only inside the procedure and keep their data until
the End statement of the procedure
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
The variable retains the values unless the Workbook closes

VBA Variables Scope &


.Lifecycle cont

Sub scopeExample()
Procedure level variables
Dim x as Integer
x=5
End Sub
Module level
Dim y as Integer
variables
all the module procedures are here
Project level variables
Public z as Integer
all the module procedures are here

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

VBA Entities by Example


A Current
Workbook

A Cell
A Range
E2:E5
A current
Worksheet

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

Referencing the Objects This will take


Examples
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
refer Sheet1

The range of
two
cells

The Output

Which Workbook
was
?Used

What does this procedure


?do
Sub ShowWorkSheets()
Dim mySheet As Worksheet

For Each mySheet In Worksheets


MsgBox mySheet.Name
Next mySheet
End Sub

!The Output

How many times


the user will
click on the
?button

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)

Referencing Cells with


Offset
Range(B1:F5).Cells(12) = XYZ

See how we
calculate cell
12
In the given
!range

Referencing Cells with


.Offset cont
ActiveCell.Offset(4, 5) = 1
This is the
currently
active cell
The
assignment
result

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

Defining and Assigning a


new Object of type Range
Dim myRange as Range
Set myRange = Range(A1:A10)

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 nave solution is to keep a lot of


variables
Another solution is to create array
keeping the whole collection together

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

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)

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

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 one of the sub-arrays

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

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

VBA Control Structures


Select

Select Case Grade


Case Is >= 90
LetterGrade
Case Is >= 80
LetterGrade
Case Is >= 70
LetterGrade
Case Is >= 60
LetterGrade
Case Else
LetterGrade
End Select

= "A"
= "B"
= "C"
= "D"
= E"

VBA Control Structures


Loops
For i = 10 to 1 Step -2
Cells(i, 1) = AB
Next i
i=1
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

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

References

http://www.usd.edu/trio/tut/excel/13.html

http://www.anthony-vba.kefra.com/
index_011.htm

Tutorial on Excel

Great place to learn VBA basics!

http://msdn.microsoft.com/en-us/library/aa2
24506(office.11).aspx

MSDN online help, a good place to learn about


Excel classes (their data and functions set)

Assignment #1

Create Excel file with grades

The data:

Create VBA module that will calculate final grade for every student
and places it in the new column allocated to keep the final grade

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

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 solutions

You should submit Excel file, and three VBA modules (only hardcopy)

You might also like