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 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
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 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
+ C Starting from E3 and till E5 drag the mouse and select the needed group of cells Press + P That is all! Ing. John Suarez
[email protected] twitter: @johnsuarezr 997205589
Solution II – using Excel Graphical User Interface 2. Click this button
Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
1. Select a cell to be updated
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!
Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
6. Finally click “OK”
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 clicks on the CommandButton1 Ing. Johnuser 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
Add Source of range for the combo-box Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
Select The ComboBox
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 Ing. John Suarez between Function and End Function [email protected] twitter: @johnsuarezr key words 997205589
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
Calling procedures vs. calling If there are few functions sumNo functions, Sub z(a) MsgBox a End Sub Sub x() Call z("ABC") End Sub Sub y() z "ABC“ End Sub
the 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 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 public Sub TestPassing2() Dim y As Integer y = 50 AddNo3 y MsgBox y End Sub
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
private Sub AddNo3(ByVal 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 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
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) Ing. John Suarez an Object variable – is nothing (still the declaration will store [email protected] space for the object!!!) twitter: @johnsuarezr 997205589
Variant “Data Type”
In VB you don‟t 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 Ing.on John“deciding” Suarez variable, it will spend time 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
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 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 Module level variables Dim y as Integer „all the module procedures are here… Project level variables Public z as Integer Ing. John Suarez „all the module procedures are here… [email protected] 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 This will take the Examples 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 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!
Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
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)
Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
Referencing Cells with Offset Range(“B1:F5”).Cells(12) = “XYZ”
Ing. John Suarez [email protected] twitter: @johnsuarezr 997205589
See how we calculate cell 12 In the given range!
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 Dim LoanBooks(3)
The array declaration. The size must be defined here!
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” … MsgBox WeekTasks(1,1) & ” ” & & vbCrLf & WeekTasks(2,1)…
What will the code print?
WeekTasks(1,2) _
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 [email protected] one of the sub-arrays 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 = Case Is >= 80 LetterGrade = Case Is >= 70 LetterGrade = Case Is >= 60 LetterGrade = Case Else LetterGrade = End Select
"A" "B" "C" "D" “E"
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
http://www.anthonyvba.kefra.com/index_011.htm
Tutorial on Excel
Great place to learn VBA basics!
http://msdn.microsoft.com/enus/library/aa224506(office.11).aspx
MSDN online help, a good place to learn about Excel Ing. John Suarez classes (their data and functions set) [email protected] twitter: @johnsuarezr 997205589
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 Ing.solutions John Suarez
You should submit Excel file,[email protected] and three VBA modules (only hardcopy) twitter: @johnsuarezr 997205589