excel vba basics

88
Excel VBA Basics Ing. John Suarez [email protected] - twitter: @johnsuarezr - 997205589

Upload: joan-paul-tasayco

Post on 26-Mar-2015

476 views

Category:

Documents


15 download

TRANSCRIPT

Page 1: Excel VBA Basics

Excel VBA Basics

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 2: Excel VBA Basics

Outline

Excel – Basic Elements

Using Macros

Excel VBA Basics

Excel VBA Advanced

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 3: Excel VBA Basics

Excel – Basic ElementsColumn - characters uniquely designate each column.

Each Row is designated by

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

Page 4: Excel VBA Basics

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-3Ing. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 5: Excel VBA Basics

Excel Spreadsheet Example

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 6: Excel VBA Basics

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

Page 7: Excel VBA Basics

Solution I

We have inserted absolute constants and invoked AVERAGE excel function

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 8: Excel VBA Basics

After update of cell “B2”Can you see

anything wrong?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 9: Excel VBA Basics

Solution II – Using Cell

References

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 10: Excel VBA Basics

Solution II – Using Cell

References

Now let‟s adda constant factor! “$A$8”

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 11: Excel VBA Basics

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

Page 12: Excel VBA Basics

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

Page 13: Excel VBA Basics

Solution II – using Excel

Graphical User Interface

3. In the opened dialogue select the needed function

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 14: Excel VBA Basics

Solution II – using Excel

Graphical User Interface

4. Go with mouse to the first argument

(here Number1)

5.Then with mouse select the

needed cells

6. Finally click “OK”

See how we refer to a range!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 15: Excel VBA Basics

Finally,

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 16: Excel VBA Basics

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

Page 17: Excel VBA Basics

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

Page 18: Excel VBA Basics

Formatting Cells

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 19: Excel VBA Basics

Formatting Cells – cont.

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 20: Excel VBA Basics

Adding Graphs/Charts

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 21: Excel VBA Basics

Outline

Excel – Basic Elements

Using Macros

Excel VBA Basics

Excel VBA Advanced

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 22: Excel VBA Basics

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

Page 23: Excel VBA Basics

Recording a new Macro

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 24: Excel VBA Basics

Recording a new Macro –

cont.

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 25: Excel VBA Basics

Recording the new Macro –

cont.

Working with Excel while recording the macro

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 26: Excel VBA Basics

Finishing the Macro

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 27: Excel VBA Basics

Running the Macro

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 28: Excel VBA Basics

Running the Macro – cont.

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 29: Excel VBA Basics

The Output!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 30: Excel VBA Basics

Looking inside the VB code of our Macro

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 31: Excel VBA Basics

What does the row mean???

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 32: Excel VBA Basics

Guess what does this Macro do? What is different now?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 33: Excel VBA Basics

Outline

Excel – Basic Elements

Using Macros

Excel VBA Basics

Excel VBA Advanced

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 34: Excel VBA Basics

VB example – “Hello World!”

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 35: Excel VBA Basics

Running the Example

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 36: Excel VBA Basics

The Output

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 37: Excel VBA Basics

Creating User From

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 38: Excel VBA Basics

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

Page 39: Excel VBA Basics

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 40: Excel VBA Basics

Adding Code to the ButtonIn 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 user clicks on the CommandButton1button

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 41: Excel VBA Basics

Do you remember the code?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 42: Excel VBA Basics

Running the code

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 43: Excel VBA Basics

The Output!!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 44: Excel VBA Basics

Using Combo-Box

Add Source of range for the combo-box

SelectThe Combo-

Box

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 45: Excel VBA Basics

Add Code to the Combo Box

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 46: Excel VBA Basics

The outputafter user

makes combo box

selection

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 47: Excel VBA Basics

Outline

Excel – Basic Elements

Using Macros

Excel VBA Basics

Excel VBA Advanced

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 48: Excel VBA Basics

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 Functionkey words

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 49: Excel VBA Basics

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

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 50: Excel VBA Basics

Calling procedures vs. calling functions

Sub z(a)MsgBox a

End Sub

Sub x()Call z("ABC")

End Sub

Sub y()z "ABC“

End Sub

Sub ShowSum()MsgBox _

Module1.sumNo(3,5)

End Sub

Function sumNo(x, y)sumNo = x + y

End Function

If there are few sumNo functions, the full name of the function is needed

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 51: Excel VBA Basics

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

Page 52: Excel VBA Basics

Arguments by Ref/by Val. Examples

Sub TestPassing1()Dim y As Integery = 50AddNo1 yMsgBox yAddNo2 yMsgBox 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 Integery = 50AddNo3 yMsgBox y

End Sub

private Sub AddNo3(ByVal x _ As Integer)

x = x + 10

End Sub

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 53: Excel VBA Basics

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

Page 54: Excel VBA Basics

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

Page 55: Excel VBA Basics

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

Page 56: Excel VBA Basics

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

Page 57: Excel VBA Basics

The Variables Advantage by Example

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

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!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 58: Excel VBA Basics

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!!!)

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 59: Excel VBA Basics

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 on “deciding” what is its “current” type!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 60: Excel VBA Basics

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

Page 61: Excel VBA Basics

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 SubIng. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 62: Excel VBA Basics

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 The variable retains the values unless the Workbook closes

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 63: Excel VBA Basics

VBA Variables Scope & Lifecycle – cont.

Sub scopeExample()

Dim x as Integer

x = 5

End Sub

Dim y as Integer

„all the module procedures are here…

Public z as Integer

„all the module procedures are here…

Procedure level variables

Module level variables

Project level variables

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 64: Excel VBA Basics

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 cellIng. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 65: Excel VBA Basics

VBA Entities by Example

A current Worksheet

A Range E2:E5

A Cell

A CurrentWorkbook

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 66: Excel VBA Basics

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

Page 67: Excel VBA Basics

Referencing the Objects -Examples

Sub Test1()

Worksheets("Sheet1").Range("A10", "B12") = "Hello“

Worksheets(1).Range("A13,B14") = "World!"

End Sub

This will take the whole square

between the two cells

The range of two cells

Two equal ways to refer Sheet1

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 68: Excel VBA Basics

The Output Which Workbook wasUsed?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 69: Excel VBA Basics

What does this procedure do?

Sub ShowWorkSheets Dim mySheet As Worksheet

For Each mySheet In Worksheets MsgBox mySheet.Name Next mySheet

End SubIng. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 70: Excel VBA Basics

The Output! How many times the user will click on the button?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 71: Excel VBA Basics

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

Page 72: Excel VBA Basics

Referencing Cells with Offset

Range(“B1:F5”).Cells(12) = “XYZ”

See how we calculate cell 12In the given range!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 73: Excel VBA Basics

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

Page 74: Excel VBA Basics

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

Page 75: Excel VBA Basics

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

Page 76: Excel VBA Basics

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 togetherIng. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 77: Excel VBA Basics

Declaring object of type Array

Dim LoanBooks(3)

LoanBooks(1) = “Winnie The Pooh”

LoanBooks(2) = “Adventures of Huckleberry Finn”

LoanBook(3) = “Frankenstein”

The array declaration.The size must be defined

here!

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 78: Excel VBA Basics

Multidimensional Arrays

Dim WeekTasks(7,2)

WeekTasks(1,1) = “To buy milk”

WeekTasks(7,1) = “To dance”

MsgBox WeekTasks(1,1) & ” ” & WeekTasks(1,2) _ & vbCrLf & WeekTasks(2,1)…

What will the code print?

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 79: Excel VBA Basics

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

Page 80: Excel VBA Basics

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

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 81: Excel VBA Basics

VBA Control Structures - If

If Age >= 18 Then Status = "Adult" End If If Age >=18

Then Status = “Adult”Vote = “Yes”

ElseStatus = “Child”

Vote = “No”

End IfIng. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 82: Excel VBA Basics

VBA Control Structures - If

If Age >= 18

Then MsgBox "You can voteElseIf Age >=22 and Age < 62

Then MsgBox “You can drive”

End If

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 83: Excel VBA Basics

VBA Control Structures –

Select

Select Case GradeCase 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

Page 84: Excel VBA Basics

VBA Control Structures –

Loops

For i = 10 to 1 Step -2Cells(i, 1) = “AB”

Next i

i =

Do While i =< 10Cells(i, 1) = ii = i + 1

Loop

i = 1Do

Cells(i, 1) = ii = i + 1

Loop While i < 11Ing. John Suarez

[email protected] -twitter: @johnsuarezr -

997205589

Page 85: Excel VBA Basics

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 iEnd Sub

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 86: Excel VBA Basics

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589

Page 88: Excel VBA Basics

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 solutions You should submit Excel file, and three VBA modules (only hardcopy)

Ing. John Suarez [email protected] -

twitter: @johnsuarezr -997205589