Excel VBA Basics

Preview:

DESCRIPTION

how to learn visua basic ...

Citation preview

Excel VBA Basics

Outline

Excel – Basic Elements Using Macros Excel VBA Basics Excel VBA Advanced

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

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

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 let’s adda constant factor! “$A$8”

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!

Solution II – using Excel Graphical User Interface

2 .Click this button

1 .Select a cell to be updated

Solution II – using Excel Graphical User Interface

3 .In the opened dialogue select the needed function

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!

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 let’s 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 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 CommandButton1 button

Do you remember the code?

Running the code

The Output!!

Using Combo-Box

Add Source of range for the combo-box

SelectThe Combo-

Box

Add Code to the Combo Box

The outputafter user

makes combo boxselection

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

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 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”…)

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 floating-point numbers

Date – used to store dates and times as real numbers.

String – contains a sequence of characters

The Variables Advantage by Example

Sub NoVariable()Range("A1").Value = _

Range("B2").Value Range("A2").Value = _

Range("B2").Value * 2Range("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!

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

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

VBA Variables Scope & Lifecycle – cont.

Sub scopeExample()Dim x as Integerx = 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

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 Worksheet

A Range E2:E5

A Cell

A CurrentWorkbook

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

The Output Which Workbook wasUsed?

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 12In 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 RangeSet 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 naïve solution is to keep a lot of

variables Another solution is to create array

keeping the whole collection together

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!

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?

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”

ElseStatus = “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 = "A"        Case Is >= 80            LetterGrade = "B"        Case Is >= 70            LetterGrade = "C"        Case Is >= 60            LetterGrade = "D"        Case Else            LetterGrade = “E"End Select

VBA Control Structures – Loops

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

Next i

i = 1Do 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 iEnd Sub

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)

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)