Today I want to show you how you can
eliminate boring and repetitive tasks in Microsoft Excel using something called
macros and VBA, or Visual Basic for applications. With macros you can
automate those everyday tasks in Excel, and by learning macros, you'll
look like a wizard in Excel. We're going to start with how to record just a
simple macro. Then I'll show you how you could run it, how you can test it, how you could
run your macro in any spreadsheet at all. Then we'll also touch on some
concepts like using if statements and setting up loops, and we'll look
at many different types of loops. If you'd like to follow along today, I've
included a sample spreadsheet right up above and down below in the description.
All right, let's check this out. If you look at the definition of macro,
it's a single instruction that expands to a set of instructions to
perform a particular task. But what does that actually mean? The best way to understand is to use an example. Here I am in Microsoft Excel and I have
orders for the Kevin Cookie Company. When an order is unfulfilled, basically
meaning that we haven't shipped it out, I want to format it differently so it stands
out a little bit more and I don't miss it. And once we fulfill the order, I'll change the
formatting back. To make sure I don't miss it, here I'll highlight this row and then I'll go
up to the home ribbon and here I'll set it to bold. I'll set it to italics.
Here I’ll apply an underline and let me apply an orange fill. If you were counting as I ran
through all of those steps, that was five separate clicks. Every time in order comes
in, I have to run through those exact same steps. Now of course I can select this cell.
I could select the format painter and then I could paste the formatting
in, but even that still takes 3 clicks. So either way I'm still doing
more work than I should. In this example, I would much
rather simply press a shortcut key or click on a button and then have Excel automate all of those different steps and that
would help me save all of those different clicks. Now this is just an arbitrary example, but
if you find yourself doing the same steps again and again in Excel and you
want to make those steps faster, well that's an excellent
candidate to turn into a macro. We're going to use something called a
macro recorder to turn all of these steps, or all of these clicks into computer code
or VBA, and that's a programming language. Once we record our macro, you can launch
it or run it in many different ways. You can press a shortcut key.
You could press a button. You could also access it through a menu.
The main summary is if you're annoyed by running repetitive tasks again and again,
you can automate all of that using macros and this was just a very simple example, but you
can also use macros for far more complex examples. Let's start with how to record a basic macro that
will do all of these steps and formatting for us. First off, let's go up to the top tabs
and let's click on the one that says view. Over on the far right hand side,
you'll see an option for macros. If we click on this drop down right here,
you'll see the option to record a macro. Let's click on that. This opens up the record macro prompt and right
up on top it currently has the name Macro1. Now of course that's not descriptive.
We can do better than that. Here I'll type in HighlightNewOrders. One thing to note with the name, you cannot
include any spaces in the name, so here I've capitalized the 1st letter of each word.
You could also include underscores to separate the different words. For the macro name you want to
make sure that you choose something descriptive, so when you go back later on and you look
at your macros, you'll know what it does. Down below you can also specify a shortcut
key combination to run your macro, so you could simply press keys on your keyboard
and your macro will run and this is optional. You don't have to select a
shortcut key if you don't want to. Here I see control + and then
I could type in a letter. You could also press the shift key together with a letter and that way you can make your
shortcut key a little bit more complex. One note on shortcut keys, whatever combination
you select here will override any shortcut keys in Excel, so you want to make sure you don't
conflict with any Excel shortcut keys that you might already be using. If you're curious what all
the different existing shortcut keys are in Excel, I've included a link in the description
down below that lists all of them out. Next we can specify where we want to store
this macro and currently this macro will only be connected to this workbook.
Later on, we'll look at the personal macro workbook, which allows you
to access your macro from whatever spreadsheet you happen to have open. Lastly,
I can also type in a description down below. Here I'll type in a quick description
that describes what this macro will do. Once again, this is helpful if let's say you
have a lot of macros and maybe you don't remember what each macro does, or it's especially useful
if you share this workbook with someone else and someone else is going to run your macros.
I'm all done now filling out these details, so I'll click on OK. My macro is now
recording and now I could run through all of the difference steps. Here I'll go down
and here I have my first unfulfilled order. I'll highlight the row. Once
again, that's one click. I'll go up to the ribbon.
I'll click into home and now I'll apply my formatting.
I’ll set it bold, italics, underline, and I'll also apply the fill.
Now that I've run through all of my different steps, once again, I'll go
up to view on the top tabs. I'll go over to macros and here I can click on
stop recording. Now that we've converted these five steps into just one click, let's take a
look at how we can run our macro, and there are a few different ways that you can run macros.
First, let's remove the formatting on this row. Here I'll make sure that this row is highlighted.
I'll click on the home tab, and then over here I'll select the option that says clear
and then I'll select clear formats. Now that we've cleared the formatting, let's
run the macro that we recorded, and once again there are multiple ways to run a macro.
First off, let's click once again up on the view tab up on top and all the way over on
the right hand side where we see macros, click on the drop down and then select view macros.
Here we see the macro that we recorded. With this highlighted, I can click on run or
I can double click on this to run it. I'll click on run and there you see it just ran
the macro and applied all of that formatting. Once again I'll remove the formatting and this
time I want to use the shortcut key. If you remember from earlier we set the shortcut key to
Control + Shift + N and when I press that that two automatically applies all of that formatting.
Once again, I'll clear out the formatting on this sheet and yet another way I can run this
macro is by clicking on an image or a button. Here I have the Kevin Cookie Company logo on
top and when I select that I can right click and right here there's the option to assign a macro.
When I click on that, that once again opens up the macro prompt and here I see
my highlight new orders macro. I'll click on OK and when I click on this logo now
look at that, that also applies the formatting. Let's once again remove the formatting and
I'll show you yet another way that you could run your macro and this time we're going to use
the quick access toolbar, and right now I don't have it enabled. Here on the ribbon, I'll right
click and I'll select show quick access toolbar. I have my quick access toolbar down
below, but you may also have it up above. I'll right click on the quick access toolbar
and here there's the option to customize. Click on that.
This opens up the quick access toolbar options and right here it's currently set to popular commands.
When I click on this dropdown, I see the option for macros and here I see the macro that
we just created called HighlightNewOrders. Here I'll add it to my quick access toolbar.
I can click on modify down below and I can choose a different icon for this macro and
I'm highlighting these cells in orange so I think it would be appropriate
to choose this orange rectangle. I'll click on OK and I see it here in this list.
I'm all done configuring it, so I'll click on OK. Here now I see the button on my quick
access toolbar and when I click on that, that also applies the formatting, so there
are many different ways to run your macros. You can choose whichever one you prefer.
Now that we've created our macro, you might want to save your workbook and this is a little bit
different than saving your standard spreadsheet. Let's go up to the file menu in the top
left hand corner and then click on Save As. Here, within the file type drop down,
typically you'll save as an .xls file, but since we have a macro associated with this
workbook, we need to save it as an Excel macro enabled workbook or .xlsm.
Select that as your file type and then click on save.
When I try to open my workbook here I see this and ask the warning message up on top and it
tells me that the macros have been disabled. I created this macro so I'm not really concerned
about the security of it, so I'll click on enable. When I click on enable.
It asks me if I want to make this a trusted document.
If I make it a trusted document, when I open it in the future, I won't see that
bar up on top again, so I'll click on yes. When you open a workbook like this, you'll want
to make sure that it's from a trusted source. If it's from an untrusted source,
there could be malicious code included. When I recorded this macro, I used
something called an absolute reference. What this means is every
single time I ran this macro, it always highlighted this one specific row.
But what if I wanted to highlight whatever row I happen to be on?
Instead, I can use something called a relative reference. To use a relative reference, first
off, let's remove the formatting on this sheet. Once again, I'll go up to clear formats.
Next, let's select an active cell. Here I'll select this one right here.
Let's now go up to View on the top tabs. Go over to macros and let's
view all of the macros. Here I'll delete the macro that we've
already recorded called HighlightNewOrders. Here I'll click on yes, let's now go back up to
macros, and at the very bottom there's the option for use relative reference.
Let's select that. Let's now go back up here again,
and let's click on record macro. I'll type in HighlightNewOrders.
Once again, I'll set the shortcut key to Control + Shift + N, and for now I'll save it
in this workbook and I'll leave the description blank. Now I'll click on OK.
The macro will now record relative to where my active cell is.
This is currently the active cell. I'll highlight this row, I'll go up to home
and once again, I'll apply the formatting, so I'll set it to bold, italics,
underline, and I'll set the fill color. I'm now all done applying my formatting.
I'll go back up to view and once again I'll stop recording.
Now that I'm done recording, I'll go up to home and let me remove the
formatting on this row and here I can now press my shortcut key Control + Shift + N.
That applies the formatting. I'll go down a row, press Control + Shift + N,
that applies the formatting on the next row. So once again it's no longer using an absolute
reference where it only highlights one row. It applies the formatting relative
to where the starting position is. Congratulations, you just created your very
first small program using VBA, wasn't that easy? Next, I want to show you how you can look at the
code that you just created. To view the code that you just created, let's go up to the top tabs
and let's click on the option that says View. Once again, all the way on the right-hand
side, let's click on this drop down under macros and click on view macros.
Here we see the macro that we created and we can click on edit.
This opens up the Visual Basic for Applications editor.
I'm going to close this window. We can also open that exact same window
by pressing the Alt together with the F-11 key. That opens up the same exact window.
And you can press Alt + F11 to toggle back and forth between Excel and your Visual Basic Editor.
So here I'll go back and forth. Next, I want to orient you to what
we see here in the VBA editor. Over on the right-hand side, this
is all of the code that we just generated when we recorded our macro.
If you don't see this code window, you can go up to the view menu and you
can select code and that'll turn this on. Over on the left-hand side
we have the project explorer. If you don't see this by default, you can go to
view and here you can select project explorer. Here we see all of our different Excel objects,
so I see all of my sheets and I see the workbook. Down below, I see modules and every macro
is a module. Over on the left-hand side, I can use the plus and minus sign to expand
and collapse these different categories. Down in the bottom left-hand corner,
I can also see the properties associated with any of these objects.
If I don't see properties down here, I can go up to view and right here
I can open up the properties window. Let's focus back over on the
right-hand side where we have our code and before we dig into this, let's adjust the
font size to make it a little bit easier to read. To adjust the font size, let's go up to tools on
top, select options and then select editor format. Right over here you could select the
font and you could also select the size. I'll go with size 18 and then click on OK
and that's a little bit easier to read now. Let's now dig into the code. Up in the top
left-hand corner it says sub highlight new orders. So what is sub?
Well this stands for subroutine and your macro is a subroutine,
and it's all packaged together as a unit. So here you see the top sub and
at the bottom you see the end sub. And here's all of our code in between.
Next, in the code we see this section with single quotes and green text.
So what is this? These are comments that explain what the code
does. Right up here we see the name of the macro and we see that it's referred to as a macro
and right down below we see a keyboard shortcut, and these comments don't at all affect the code.
So here I can type in a single quote and I can say I can type my own comment and once
again this won't impact our code at all. It's a good practice, especially if you have
a complicated macro to include comments that explain what the different sections
of your code do. Next up in the code, here I can see ActiveCell.Range(“A1:E1”).Select
and this is when I selected the cells. Now you might think I'm selecting these specific cells,
but remember I turned on a relative reference, so here's looking at the active cell that I have
selected and then it chooses a range equivalent to cells A1 through E1, and then it selects it.
The next ones are pretty self explanatory. Here I set them to bold.
I also set them to italics and then I also underline them and in this big
section of code here this sets the fill color. So those simple formatting actions that we took
is represented by all of this code right here. Now we have complete control over this
code and we can make modifications here and that'll in turn modify the macro.
So let's say maybe I don't want to set it to bold anymore. Instead of saying
true here, I could change this to false. I'll press Alt + F11 to go back to my workbook. And here, on the very last row,
once again I'll run my macro and here you'll see that it's no longer bolded.
And look at that, we have complete control over the actions from this code.
You'll probably create most of your macros simply by recording, so you don't really
have to know much about the code behind it, but I still recommend that every time
you record, you look at the code. That way you become more familiar with it and
over time you understand it better and better. Up to this point, we've been creating and viewing
our macros through the view tab and then clicking on macros over on the right-hand side.
However, we can turn on another tab called developer that makes this even easier
and quicker to record and view your macros. To turn this on, hover over your ribbon and right
click. Right here click on customize the ribbon. Over on the right-hand side,
you'll see all of your main tabs. Check the one that says
developer and then click on OK. You should now see a new tab up on top that says
developer and when you click on this you'll see all of the different developer tools and on the
left-hand side we have all of our macro tools. So this makes it even quicker to get to these
different commands. The macro that we created so far is attached to this one specific workbook.
But let's say that we want to access our macro from anywhere, so whatever
spreadsheet you happen to have open. We can create our macro in something
called the personal macro workbook. To do this, let's go up to the top tabs and click
on the one that says developer. Once again over on the left-hand side, let's click on record macro.
Here I'll give it the name HighlightNewOrdersEverywhere.
I won't enter in a shortcut key for now and for store macro in, I’ll select this drop down
and this time instead of choosing this workbook, I'll place it in the personal macro workbook.
I'll skip the description and then click on OK. Now that we are recording, I’ll run
through the same steps again. Here, I'll click on the home tab.
I'll highlight this row and then I'll set it to bold, italics, underline
and I'll set the fill color to orange. I'll go back up to developer
and now I'll click on stop. I've now opened up an entirely new workbook
that doesn't have any macros attached to it. Here I'll click on the developer tab.
I'll click on macros and here I see my HighlightNewOrdersEverywhere macro.
Once again, this macro is available in any workbook that I have. Here I can double
click on it and here that just ran the macro. Now let's say I want to edit
my personal macro workbook. Here I'm in the developer tab and I
can click on macros and here I see my HighlightNewOrdersEverywhere macro.
However, if I click on edit, I get this error message that says I
cannot edit a macro on a hidden workbook. When I create a macro in the personal macro
workbook, it's created it in a workbook behind the scenes and so I can't edit it this way.
So then how can I edit one of these macros? Well, just like we did before, we
can press Alt + F11 or we can launch Visual Basic here from the ribbon.
Within the Visual Basic editor over on the left-hand side, I now see a new category in the
Project Explorer for personal and this contains all of my personal macros. Here when I click
into Module1 we can see what I just recorded. As a quick aside, let's say that you have a
macro attached to an individual workbook, but you would like to make this available everywhere.
Here I can highlight the code and I could bring it over into this personal macro workbook and I
could paste it in and this will now be available everywhere. Back on the main sheet, next, I want
to show you how you can view the code as you're recording your macro, and to do that, I'll open up
Excel side by side with the Visual Basic editor. I now have Excel open side by side with my
editor, but you'll notice that the ribbon in Excel takes up a lot of space, and so
does the quick access toolbar. Luckily I can hide both of those.
Here I'll right click on the ribbon and I'll select collapse the ribbon.
I'll also right click on the quick access toolbar and here I’ll select to hide it.
And that gives me quite a bit of space now to see my spreadsheet and the code.
I now want to record a macro that removes the formatting. Just like we've been
doing all along, let's go up to developer. Here I'll set it to use a relative reference and
I'll make sure that I have this cell selected where I have the formatting that I want to remove.
Next I'll click on record macro. Right here for the name, I'll type in ClearFormatting.
I won't set a shortcut key and here I'll just save it in this workbook.
And I won't enter a description. Next, I'll click on OK.
Right up above you'll notice that it now added a second module and
this is now for the ClearFormatting macro. It's now recording and let me run through
the steps of removing the formatting. Here I'll highlight this row and you
see the code show up right up above. Then I'll click on the Home tab and over
here I'll select clear and clear formats. Right up here you can see that these two commands will clear the formatting
from these selected cells. That's all I want this macro to do,
so I'll go back to the developer tab and here I'll click on stop recording.
But I don't want to create two separate macros, one that highlights and another
one that removes highlighting. Instead, I want to set up a toggle,
so if it's already highlighted, it'll remove the highlighting, and if there
is no highlighting, it'll highlight it. And to do this I can use an if statement.
Let's jump back into the code. Here I am back in the Visual Basic editor and
I'm currently in module1 and I'm looking at the HighlightNewOrders macro. Down below in
the code, first I select a set of cells and next I want to check have I already
applied formatting to those cells? And we can use an if statement to check that.
Here I'll type in if and just for simplification, I'll only check whether it's been bolded,
and if it hasn't yet been bolded well, then I want to make it bold. So here
we'll type in if selection.font.bold, so that's simply reusing this line down
here, equals false, so if it's not yet bold, well then we take all of these actions down
here, so I'll make it bold ,I'll make it italics, underline, and I'll set the fill color. Down at
the very bottom, I have to say what will happen if it's already highlighted and it's already
bold. Here I'll enter down and I'll type in else. Here I'll enter a colon and now I have to say,
well, what happens if it's already highlighted. Here if I click into Module2, we
already recorded the code for this. This will remove the highlighting.
I'll copy this. I'll go back to Module1 and here I'll paste it in.
I'll tab this out and here. I'll select all this code
as well and tab that out. This makes it a little bit
easier to read the code. At the very end, to close out my if statement
here, I'll go back and I'll type in End If. And this now creates a toggle, so if it's not
highlighted, it'll highlight it, and if it's already highlighted, it'll clear the highlighting.
Here I am back on my Excel sheet and it's the moment of truth. We're going to
test whether this works as expected. I'm going to press Control + Shift
+ N, my shortcut key for this macro and there it applies the formatting.
But we did that before. What if I press it again?
Once again, I'll press Control + Shift + N. This will run the macro again, and because those cells
had highlighting, it now removes the formatting. Pretty cool. With this example, we took
two separate macros that we recorded independently and then we brought them together
into one macro, and that's a fantastic strategy for building together code.
Simply record independent pieces and then you could pull them all together.
So far, we've just been highlighting one row, but what if I want to highlight multiple rows?
Here once again I have the Visual Basic editor open side-by-side with Excel and
I want to highlight multiple rows. Once again I'll click on developer and here I'll
make sure that I have use relative reference turned on. I'll click on record macro and this
time I'll call it HighlightNewOrdersForLoop. I won't set a shortcut key. I'll leave it stored
in this workbook and I'll leave the description blank and then click on OK. Right up above,
you can see that I've now created a new macro and I'm going to go through and apply these
same formatting that we've been doing all along. Here I'll click on the home tab.
Here I'll select this row and here I'll apply the bold, italics, underline,
and the fill color, so once again we can see all of the code right up above.
Here I'll select the next row. I'll highlight all these cells
and once again I'll apply the exact same formatting that I applied before.
And if we look closely at this code, you probably notice some repetition.
Here I'll select yet another row, and here I'll highlight all of the cells and once
again I'll apply all this formatting. I'm now all done recording my macro. I'll click back onto
developer and then I'll click on stop recording. You'll notice in the code there's a lot of
repeating code and instead of us recording the same step again and again and again, we
can let Excel do that for us using a for loop. I've now expanded the code so it uses
up my full screen and let's just take a quick look at what's happening here.
Once again I select a row and here I apply all of the formatting and as soon as I
apply the formatting, I go to the next row and then I do the same exact thing.
And here once again I go to the next row and then once again I apply the formatting.
From this point down, this is all repeating what we've already done up above, and
I don't want to have repeating code. Instead, I can use a for loop to tell Excel to
do this as many times as I want it to do it. Right down below, let's delete all
of the repeating code. Right from this point downwards, let's delete all of this.
Now that I've removed all of the repeating code, I'm ready to tell Excel how many times I
want Excel to run this code, and once again we're going to use a for loop to do this.
To set up a for loop, you simply start by saying for and I'll type in a variable name.
Let's go simple and just use counter. I'll set it equal to 1 and
we'll go through four times. So with this I'm telling Excel that I want
to repeat this code four individual times. At the very bottom I have to close out the
for loop, so I'll type in next and counter. So it'll go through one time and then it hits
next counter and it'll increment it to two. It'll go through again.
It will increment it to three. It'll go through again, it'll increment
it to four and then this code will stop. So I could tell it exactly how many times
I want Excel to run through this code. Let's now go back into our Excel sheet,
I'll press Alt + F11 and let's test this out to see if it works as expected.
First I want to highlight all of these cells and I’ll remove the formatting.
Now let's go up to the developer tab. Let's click on macros and here I see my
new macro titled HighlightNewOrdersForLoop. Let's click on run. And look at that,
it goes through row by row four times and it highlights all of those rows.
In this example, we specify exactly how many times we want the for loop to run, but
what if we want to make it dynamic so the user can choose. For that we can use an input box.
Back within the Visual Basic editor, here once again I can see my for loop,
except this time I want the user to specify how many times this code should run, and
for this we're going to use an input box. Here I'm going to create a
variable called UserInput. I'll enter an equals sign and
then I'll type in InputBox. This will force an input box to appear where the
user can enter how many times they want it to run. Here I'll open up the parentheses and
now I can enter text in for the prompt and I'll simply type in enter number of rows.
Then I'll close my quotes, insert a comma, and now I could enter a title for my prompt.
Here you can see all of the different items that you can customize for this input box.
Here, I'll simply say rows to highlight. Then I'll close my quotes and
I'll close my parentheses. Whatever value the user enters in, that will be
stored in UserInput. Down here for the counter, I want it to run to match whatever the user input
is. So instead of entering 4 here, I'll type in UserInput. So let's say someone enters 6 in.
Here it'll run 1 through 6. Now that we've made these tweaks, let's jump back
into Excel to test it out. Back within Excel, let's now test this out.
I’ll go up to the developer tab, let's click on macros and here I see my
macro HighlightNewOrdersForLoopWithInput. Here I'll click on run and I now see
a prompt that allows me to specify how many rows I want to highlight.
Here I'll type in 6 and then I'll click on OK. And here we see that it went through 6
times and highlighted all of these rows. With the for loop, you have to
specify how many times it should run. But maybe we don't know how
many times it should run? Instead we can use something
called a do while or do until loop. These loops will continue running until a
certain condition is met that you specify. Here back in the code, I've created a new
macro called HighlightNewOrdersDoWhile and at least right now this is the exact
same code as what I used for the for loop, except this time I want to convert this to a do
while loop, so once again it will continue running until a certain condition is met.
Here, I'll remove the for portion and also the next counter, and to create a
do while loop, well, you simply type in do while and here I want it to continue running
until it hits a blank cell, so I'll type in ActiveCell. We've used ActiveCell before.
All you have to do is look one line down and I'll say until it's not equal to blank.
This is the not equal sign. At the very bottom, to close out this loop, I can simply
type in loop and that's all I need to do. Let's go back into Excel. Within Excel,
once again, let's go up to the developer tab and over here, let's click on macros.
Right here I can see my new macro titled. HighlightNeOrdersDoWhile
and here I'll click on run. Here you'll see it goes through and it highlights
every single row until it reaches the bottom, at which point it finds an empty
cell. Back in the Visual Basic editor, I want to show you yet one more type of loop
that you have access to and this one is just a slight variation on the do while loop.
This one is called do until. I created a new macro titled HighlightNewOrdersDoUntil.
Down below instead of saying do while, we'll change this to do until.
Here I'll remove this portion and we're going to do this until we
find that the active cell is empty. Here I'll type in IsEmpty.
This is a function that's available within Visual Basic and here I'll check
is the active cell empty, so I'll type that in. Down below we close the loop with loop
once again and that's all it takes. You can choose whichever loop you
want to use that meets your needs. Within Excel, o nce again, let's test this out.
I'll go up to the developer tab up on top. I'll click on macros and let's
click on the one that says do until. Here I'll click on run and it works
the same way as the do while loop. It's just a different way of structuring it.
You now have the fundamentals of creating macros. You know how to create if statements
you know many different types of loops. Next, let's bring everything together in a more
complex example, and although I say complex, you have all the skills and tools
necessary to be able to pull this off. Here I am back in Excel and I have a whole bunch
of order information for the Kevin Cookie Company on the bring it all together sheet and if you look
at this the formatting is not really that clear. Here I continue repeating the header
and then I have the data over here. I would much rather format it so it matches the
format that appears on the basic macros worksheet, and let's imagine that maybe I get a new set
of orders every single week, so every single week I end up manually reformatting this data.
I don't have to do that anymore because now we know all about macros and we're going to use
everything that we just learned to get all of this data into the proper format.
To make this as easy as possible, we're going to break this up into chunks, and
if I click back on the other sheet, first, I want to get the headers so they appear properly.
Back on the bring it all together worksheet, let's go up to the developer tab,
and over here, let's record a macro. Also make sure that use relative reference
is turned off and we're using an absolute reference. Here I'll click on record macro. For
the macro name, I'll call this TransposeHeaders. I won't select a shortcut key and I'll leave
it in this workbook, and then I'll click on OK. Over on the left hand side, here I'll
highlight all of the unique header items, so these five different rows. I'll copy
it and then I'll click over into cell D1. I'll click on the home tab up on top,
I'll click on the drop down under paste. I'll go down to paste special and right here I'll
select transpose. So this will transpose it from a vertical orientation to a horizontal orientation.
That's all I need for the TransposeHeaders macro, so I'll click on the developer tab up on top. Then
I'll click on stop recording. To make sure that the macro works properly, let's test this out.
I'll select columns D through H. I'll right click and let me
delete all of the contents. I'll go up and click on macros and let's
run the new TransposeHeaders macro. I'll click on run and there it
successfully transposes the headers. This is exactly what I expected.
Now that I've pasted in the headers, next I want to transpose the customer
information and this will be our second macro. At the end, we'll bring all of
these macros together into one. Once again, let's go up and click on record macro and for this macro I'm going to
call it TransposeCustomerOrders. I also want to make sure that
it's set to an absolute reference. I won't set a shortcut key and
I'll store it in this workbook. Then I'll click on OK, and here I'll select cell
B2, the first bit of customer information and one thing I'm going to change now is I
want to now set this to a relative reference and here I'll select all of the customer
information. I'll press Control + C to copy. Then I'll click over to D2.
I'll go to home. I'll click on paste and once again let's go to
paste special and let's transpose this data. So this space in the customer order and there's
a lot of different customer information. We're going to use a loop to go
through all of this information, but for now I simply want to copy and paste over a
few of the items, so just like we did previously, we can see the repeating code. Here I'll
select an additional customer order. I'll press Control + C and then I'll come over to
cell D7 and here I'll go to paste, paste special and then I'll click on transpose. Once again,
I'll select one more customer order. I'll copy, click over into D12, go to paste, paste
special, and here I'll transpose once again. Once we jump into the code, we'll see some of
that code repeating, and that's where we're going to insert the loop.
You might be wondering. Why am I leaving all of this space in
between the different customer orders. Shouldn't I just paste right
underneath the previous one? Well, once again we want the code to be repetitive
and here if I copy this item and then I paste it up here, well, each time that I paste it,
the spacing would be slightly different and that's not repeatable with code.
So here we'll simply paste it directly to the right of the top line of the customer order
and later on, we'll record an additional macro that'll remove these spaces.
I'm now done recording this code. I'll go up to the developer tab
and let's click on Stop recording. Before we jump into the code, let's test our
macros to see how they work so far. Here once again, I'll select columns D through H, I'll
right click and let me delete all of the contents. I'll go up to macros and first we
want to transpose the headers, so I'll run that and now we have the headers.
I'll click on macros again, and here let me click on TransposeCustomerOrders.
I'll run that and it works exactly as expected. We're now ready to add a loop, so we add all of
the customer information under these headers, and to do that, we're going to
open up the Visual Basic editor. Just like we've been doing all along, let's
press the Alt key together with the F11 key. Here we are back in the Visual Basic editor and
we can see the two macros that we just recorded. Here I see the macro for transposing the headers
and right down below, here's the macro and all the associated code for transposing the customer
orders. Within TransposeCustomerOrders, I want to set up a loop so it goes through
that entire list of all of the customer orders. Let's look through the code to see
where the repeating portion is. Right up here I select cell B2 and this
is an absolute reference. The reason we made this an absolute reference is we always
want to start from this specific location. From there we switch to a
relative reference and then we copy the next five rows of customer information.
Then we copy the information and then we transpose it under the headers and right down here we then
select the next five rows of customer information. We set Cut Copy mode to false
and then we copy the information. So right here I see Selection.Copy
and we had that earlier right here. Here if I look at this code all the way down, we
just ran through this exact same code up above, so this is our repeating section of code so we
can place a loop around this segment of code. So here I'll delete the repetitive portions all
the way down, and if we look up here, once again, this was the repeating portion of code
and we'll place a loop around this. To create the loop once again, we could use
any of the loops that we learned about today. You could create a for loop, a do while, or a do
until. I'm going to use a do while loop and I'll simply run this loop until we hit an empty cell.
So once we've gone through the entire column of customer information. Here,
just like we did earlier, I'll type in, do while and here
I'll type in ActiveCell <> “” To close out the loop down at the bottom here,
once again I'll type in loop and now we have the loop in place and we're ready to test this code.
Now that we've set up our loop, let's test this out to ensure everything
is working properly and we can use a new technique where you can test it line by line.
Here I have Excel open side-by-side with the Visual Basic editor, so as the code runs
we can see the changes happen in Excel. Before we run the code, let's delete
the data that we recorded previously. Here I'll highlight the data and I'll go through
and delete that, so now it's completely blank. Now we're ready to test it.
To test it, let's go into the Visual Basic editor and make sure your cursor
is within the TransposeCustomerOrders macro. Right up here there's a menu called debug
and there's an option called step into. You can also use the shortcut key F8.
This will allow us to run our code line by line and as it runs through line by line, we'll
see the changes happening up above. To start, I'll press the F8 key and here we see
that this macro is currently active. I'll press F8 again and we'll see each line
highlight as that's the active line of code and as I press it we can see that it's
running through the code and up above you can see the associated changes.
That's pretty cool, right? So here we see that it's currently in the loop
and this will continue running until it hits that empty active cell. Now if you get tired
of pressing F8, you could also just run this entire block of code. Right up above, you can
press the continue icon, or you can press the F5 key. Here I'll click on that and it'll run
through the loop until it hits that empty cell. Here when I scroll up, I can see that
it successfully copied and pasted the information under the headers.
The hard part is now out of the way, but we do have to record one more macro.
I have all of these blank rows here and I want to remove them. To remove these blank rows, once
again, let's go up to developer. This time, let's use an absolute reference because I
know my data is in these columns and I want to reference these specific columns. I'll turn
off use relative reference. Here I'll click on record macro and for this macro I'm
going to call this remove blank rows. I won't set a shortcut key, I'll store it
in this workbook and then I'll click on OK. Here I'll select columns D through H. Let's click on the home tab and on the right
hand side, click on find and select go to special and right here we can select all blanks.
I'll select that and then click on OK. With all of the blanks selected, I'll
right click and then I can click on delete. It asks me how I want to delete it.
I want to shift the cells up, then I'll click on OK and here you see all of
the data is now here without any blank spaces. Next, let's go up to developer
and then click on stop recording. We're almost done.
We now have our three macros, but we want to combine these three macros into one.
This way, when we run the code, it'll run through all of these steps.
Just like we've been doing all along, let's press Alt + F11 to jump into the Visual Basic editor.
We're going to combine these three macros that you see right here.
Combining them is pretty easy. Here I'll take the name of the first macro and
I'm going to retitle this CleanUpCustomerData. This will be the macro that
contains all of the other macros. Down here instead of ending the macro,
I'm going to delete the end subroutine. I'll also delete the start of the next macro, and
by doing that, it's now combined these two macros. Down below I'll do the same
to the customer order macro. Here I'll get rid of the end and I'll
get rid of the start of the next one, and this has now effectively combined the three
macros into just one macro. Back within Excel, let's test out this combined macro.
Here I'll highlight these columns. I'll right click and I'll delete all
of the customer information over here. Let's go up to macros and here I see my
combined macro called CleanUpCustomerData. Let's click on run and there it goes through and
I'll go down so we get a fresh view. Here I see all of the headers, the customer information,
and all of the spaces have been removed. This is exactly the format that I want my data
in. As we were running the code, you might have noticed that the screen showed all of the
different steps as it was running through that and that slows things down a little bit.
To make things even more efficient and fast, we can turn off screen updating. To turn off screen
updating, we just need to add 1 line of code. Here I'll type in application screenupdating = false
This way the code will run and we won't actually see it running on the screen. That'll
help speed things up a little bit. Let's test it out. Once again, in Excel
I’ll delete all of the customer information. Let's go back up to macros and here all run
CleanUpCustomerData and there it just appears. So it goes a lot quicker and we don't have to
see all of the magic happening behind the scenes. One thing I want to call out before I leave you.
When you run a macro, there's no going back. You can't undo the macro.
So if you're going to run a macro and it's going to be destructive to your data, use extra caution
because once again, you can't undo the changes. All right, well, that's how easy it is to
start recording and editing macros in Excel. And you probably feel a little bit
closer to now becoming a wizard in Excel. To see more videos like this one,
check out the playlist up above. Also, please consider subscribing
and I'll see you next time.