The Cells Property
As well as referring to cells on a spreadsheet with Range
you can use Cells
. The Cells property has an Item
property that you use to reference the cells on your spreadsheet:
Cells.Item(Row, Column)
The Row is always a number. But the column can be a number or letter:
Cells.Item(1, 1)
Cells.Item(1, "A")
Both the lines above refer to the cell A1.
You can shorten this even further and get rid of the Item property altogether:
Cells(1, 1)
Cells(1, "A")
The reason why we're discussing the Cells property is because it's very useful in programming loop. That's because you can replace the numbers between round brackets with a value from your loop. Let's clear that up.
Create another Sub to your coding window. Call it CellsExample
. Add the following code:
Dim StartNumber As Integer
Dim EndNumber As Integer
EndNumber = 5
For StartNumber = 1 To EndNumber
Cells(StartNumber, "A").Value = StartNumber
Next StartNumber
The only difference between this For
loop and the last one is this line:
Cells(StartNumber, "A").Value = StartNumber
Because the StartNumber
gets 1 automatically added to it each time round the loop, we can use it between the round brackets of Cells
. So the code is doing this:
Cells(1, "A").Value = 1
Cells(2, "A").Value = 2
Cells(3, "A").Value = 3
Cells(4, "A").Value = 4
Cells(5, "A").Value = 5
Or we could keep the Row number the same and change the column number:
Cells(1, StartNumber).Value = StartNumber
Or we could do both:
Cells(StartNumber, StartNumber).Value = StartNumber
The above line will get us a diagonal line form cell A1 to cell E5, which each cell filled with the numbers 1 to 5.
The point is, though, that we can manipulate the cells on a spreadsheet by using just a number from our loop and the Cells property.
You can use Offset
with cells, too. In this next exercise, we'll do the 10 times table. It will look like this:
Create a new Sub and call it TimesTable
. Set up the following four Integer variables, first:
Dim StartNumber As Integer
Dim EndNumber As Integer
Dim answer As Integer
Dim TimesTable As Integer
Now put a value of 10 in two of them:
EndNumber = 10
TimesTable = 10
This time, our end number is 10. We've also specified 10 for the TimesTable
variable.
The first line of the For
loop is as before:
For StartNumber = 1 To EndNumber
And so is the end of the loop:
Next StartNumber
In between For
and Next
the first line is this:
answer = StartNumber * TimesTable
To work out what this does, start on the right of the equal sign:
StartNumber * TimesTable
The TimesTable variable will always be 10. But the StartNumber variable changes each time round the loop. The first time round the loop we'll have this:
1 * 10
The second time round the loop we'll have this:
2 * 10
The third time it's:
3 * 10
And so on, right up to 10 times 10.
Each time VBA works out the result of the multiplication, it stores it in the variable called answer
.
The next line of the code is this:
Cells(StartNumber, 1).Value = StartNumber & " times " & TimesTable & " = "
It's rather a long line, so let's break it down to see what's happening.
To the right of the equal sign, we have this:
StartNumber & " times " & TimesTable & " = "
We're using three concatenation symbols, here (&). So we're joining four things together:
StartNumber
" times "
TimesTable
" = "
We're joining together: the StartNumber
variable, the direct text " times ", the TimesTable
variable, and the direct text " = ".
Once VBA has stitched all this together it will place the result into whatever is on the left of the equal sign. Which is this:
Cells(StartNumber, 1).Value
So the result of the concatenation is being stored in the Value
property of Cells
. The cells we're accessing will change because of what we have between the round brackets:
StartNumber, 1
StartNumber will change each time round the loop, but the hard-coded 1 means the "A" column. So it will be this, the first few times round:
Cells(1, "A")
Cells(2, "A")
Cells(3, "A")
Cells(4, "A")
The third and final line to add to your For
loop is this:
Cells(StartNumber, 1).Offset(, 1).Value = answer
The Offset moves the column over 1 from where we were, which was the A column. Whatever is in the answer variable is what will be used as the Value for the cells being referred to with Offset.
The whole of your code should now look like this:
Try it out. When your run the code you should see the same values as ours (We've formatted the cells slightly):
And there you go – the 10 times table using For loops, Cells, and Offset. But before we move on, try these exercises.
Exercise
Make one single change to your code to display the 12 times table up to a value of 120.
Exercise
Make another single change to print out the 12 times table up to a value 240.