Transcript vbaintro

University of Chicago
Graduate School of Business
Introduction to Computer Based Models
Mr. Schrage
Introduction to Excel VBA
Bus-36102-81
Spring 2003
What is the Visual Basic Add-in for Excel?
Makes the power of the Visual Basic programming language
available to Excel models.
Why is this good?
1) Can automate tedious manual steps in using the spread sheet.e.g.,
run multiple cases, automatically adjust the sheet to handle data
sets of different sizes.
2) Add new functions that can be used like a regular function in
formulae, e.g., add the Black-Scholes formula.
3) Add new features that are essentially impossible in simple Excel,
e.g., fancy dialog boxes.
Accessing VBA from Excel
Within Excel, click on:
Tools | Macro | Visual Basic Editor
To bring up a code sheet, click on:
Insert | Module
You can now enter code for your function in the code sheet.
Example: A One Argument User Defined Function
An important function in evaluating alternatives in decision
making under uncertainty is the linear loss function.
If X is a random variable, and S is a decisionmaker specified
threshold, then the expected linear loss is E[max(0,X-S)].
For example, the Black-Scholes formula is essentially the
linear loss function for the log-Normal distribution.
Excel has no built-in linear loss functions.
LINGO has built-in linear loss functions for the
Normal(@PSL) and the Poisson(@PPL).
The following implements the linear loss function for the
Normal distribution.
See file: vbapsl.xls
The code for the User defined function: psl();
See the file: vbapsl.xls
Function psl(z)
'Standard Normal linear loss function.
'Given the number of standard deviations, z,
'above the mean,
'psl = expected amount by which a standard Normal
' deviate exceeds z, i.e., psl = E[max(0,X-z)].
'
psl = Exp(-z * z / 2) / (2 * Application.Pi()) ^ 0.5 _
+ z * Application.NormSDist(z) - z
End Function
Things to note about a VBA function:
-Comment lines start with a ‘
-To use in VBA, a function that is in the application to which
VBA is attached, Excel in this case, the function name must be
preceded by “Application.”, e.g., Application.NormSDist(z).
-To continue an statement to the next line,
put an underscore, _, at the end of the line being continued.
Example: Functions with More Arguments
The following simple user defined function computes the
mean of a range.
Not a big contribution, but the same code is easily extended to
compute standard deviations and correlations.
Some of the built-in functions in Excel are not very accurate and
you may wish to replace them, e.g., stdev().
See the file: vbamymean.xls
Function mymean(region As Range)
' Our own version of a function to compute the mean of a range
Dim ourcopy As Variant
Dim nrows As Long, ncols As Long, i As Long, j As Long
Dim sum As Double
' Transfer the data to our own array
ourcopy = region
' Find out how many rows and columns
nrows = UBound(ourcopy, 1)
ncols = UBound(ourcopy, 2)
' Add up all the elements
sum = 0.0
For i = 1 To nrows
For j = 1 To ncols
sum = sum + ourcopy(i, j)
Next j
Next i
' Finally, the mean
mymean = sum / (nrows * ncols)
End Function
Automating Standard Keystroke Sequences
If there are certain keystroke sequences, you may wish to automate
them so that either one or two keystrokes or a mouse click is all that
is needed to cause the sequence to be executed.
There are two ways of doing this:
a) Use the Tools | Macro | Record feature in Excel, or
b)Write a VBA function to do it if you want to do some
fancy things along the way.
The following example illustrates the automation of a simple set of
keystrokes you might use if you were managing a check register in
Excel.
See the file vbabutton.xls
Sub addleftup()
' Subroutine to first
'
move the cursor one cell right
ActiveCell.Offset(0, 1).Range("A1").Select
' and then insert a formula in the active cell
' to add the contents of cells just to the
' left and just above the active cell
ActiveCell.FormulaR1C1 = "=RC[-1]+R[-1]C"
End Sub
Adding a Button to a Sheet
Bring up the “Forms” toolbar by clicking on:
View | Toolbars | Forms
Click on the button button (4th from left) on Forms toolbar
and draw a button.
Right click on the newly drawn button to
edit the text in the button and to
assign it to the macro you have just written.
Learning More
There are a number of “popular” books on Visual Basic and VBA,
but apparently none of “text book” quality w.r.t. thoroughness
and consistent level of coverage.
When looking for books, realize the distinction between
Visual Basic the stand-alone language, and
VBA the add-in for Microsoft products such as Excel
and MSWord.
A “popular” style book is:
Green, J., R. Rosenberg(2001), Excel 2002 VBA Programmer’s
Reference, Wrox Press Ltd., Birmingham, UK, ISBN 1-861005-70-9 .