In this lesson you can learn how to add a formula to a cell using vba. There are several ways to insert formulas to cells automatically. We can use properties like Formula, Value and FormulaR1C1 of the Range object. This post explains five different ways to add formulas to cells.
We use formulas to calculate various things in Excel. Sometimes you may need to enter the same formula to hundreds or thousands of rows or columns only changing the row numbers or columns. For an example let’s consider this sample Excel sheet.
In this Excel sheet I have added a very simple formula to the D2 cell.
=B2+C2
So what if we want to add similar formulas for all the rows in column D. So the D3 cell will have the formula as =B3+C3 and D4 will have the formula as =B4+D4 and so on. Luckily we don’t need to type the formulas manually in all rows. There is a much easier way to do this. First select the cell containing the formula. Then take the cursor to the bottom right corner of the cell. Mouse pointer will change to a + sign. Then left click and drag the mouse until the end of the rows.
However if you want to add the same formula again and again for lots of Excel sheets then you can use a VBA macro to speed up the process. First let’s look at how to add a formula to one cell using vba.
Lets see how we can enter above simple formula(=B2+C2) to cell D2 using VBA
In this method we are going to use the Formula property of the Range object.
Sub AddFormula_Method1()
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
WS.Range("D2").Formula = "=B2+C2"
End Sub
We can also use the Value property of the Range object to add a formula to a cell.
Sub AddFormula_Method2()
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
WS.Range("D2").Value = "=B2+C2"
End Sub
Next method is to use the FormulaR1C1 property of the Range object. There are few different ways to use FormulaR1C1 property. We can use absolute reference, relative reference or use both types of references inside the same formula.
In the absolute reference method cells are referred to using numbers. Excel sheets have numbers for each row. So you should think similarly for columns. So column A is number 1. Column B is number 2 etc. Then when writing the formula use R before the row number and C before the column number. So the cell A1 is referred to by R1C1. A2 is referred to by R2C1. B3 is referred to by R3C2 etc.
This is how you can use the absolute reference.
Sub AddFormula_Method3A()
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
WS.Range("D2").FormulaR1C1 = "=R2C2+R2C3"
End Sub
If you use the absolute reference, the formula will be added like this.
If you use the manual drag method explained above to fill down other rows, then the same formula will be copied to all the rows.
In Majority cases this is not how you want to fill down the formula. However this won’t happen in the relative method. In the relative method, cells are given numbers relative to the cell where the formula is entered. You should use negative numbers when referring to the cells in upward direction or left. Also the numbers should be placed within the square brackets. And you can omit [0] when referring to cells on the same row or column. So you can use RC[-2] instead of R[0]C[-2]. The macro recorder also generates relative reference type code, if you enter a formula to a cell while enabling the macro recorder.
Below example shows how to put formula =B2+C2 in D2 cell using relative reference method.
Sub AddFormula_Method3B()
Dim WS As Worksheet
Set WS = Worksheets("Sheet1")
WS.Range("D2").FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub
Now use the drag method to fill down all the rows.
You can see that the formulas are changed according to the row numbers.
Also you can use both relative and absolute references in the same formula. Here is a typical example where you need a formula with both reference types.
We can add the formula to calculate Total Amount like this.
Sub AddFormula_Method3C()
Dim WS As Worksheet
Set WS = Worksheets("Sheet2")
WS.Range("C5").FormulaR1C1 = "=RC[-1]+RC[-1]*R2C2"
End Sub
In this formula we have a absolute reference after the * symbol. So when we fill down the formula using the drag method that part will remain the same for all the rows. Hence we will get correct results for all the rows.
So now you've learnt various methods to add a formula to a cell. Next let’s look at how to fill down the other rows with the added formula using VBA.
Assume we have to calculate cell D2 value using =B2+C2 formula and fill down up to 1000 rows. First let’s see how we can modify the first method to do this. Let’s name this subroutine as “AddFormula_Method1_1000Rows”
Sub AddFormula_Method1_1000Rows()
End Sub
Then we need an additional variable for the For Next statement
Dim WS As Worksheet
Dim i As Integer
Next, assign the worksheet to WS variable
Set WS = Worksheets("Sheet1")
Now we can add the For Next statement like this.
For i = 2 To 1000
WS.Range("D" & i).Formula = "=B" & i & "+C" & i
Next i
Here I have used "D" & i instead of D2 and "=B" & i & "+C" & i instead of "=B2+C2". So the formula keeps changing like =B3+C3, =B4+C4, =B5+C5 etc. when iterated through the For Next loop.
Below is the full code of the subroutine.
Sub AddFormula_Method1_1000Rows()
Dim WS As Worksheet
Dim i As Integer
Set WS = Worksheets("Sheet1")
For i = 2 To 1000
WS.Range("D" & i).Formula = "=B" & i & "+C" & i
Next i
End Sub
So that’s how you can use VBA to add formulas to cells with variables.
Next example shows how to modify the absolute reference type of FormulaR1C1 method to add formulas upto 1000 rows.
Sub AddFormula_Method3A_1000Rows()
Dim WS As Worksheet
Dim i As Integer
Set WS = Worksheets("Sheet1")
For i = 2 To 1000
WS.Range("D" & i).FormulaR1C1 = "=R" & i & "C2+R" & i & "C3"
Next i
End Sub
You don’t need to do any change to the formula section when modifying the relative reference type of the FormulaR1C1 method.
Sub AddFormula_Method3B_1000Rows()
Dim WS As Worksheet
Dim i As Integer
Set WS = Worksheets("Sheet1")
For i = 2 To 1000
WS.Range("D" & i).FormulaR1C1 = "=RC[-2]+RC[-1]"
Next i
End Sub
Use similar techniques to modify other two types of subroutines to add formulas for multiple rows. Now you know how to add formulas to cells with a variable. Next let’s look at how to add formulas with some inbuilt functions using VBA.
Suppose we want the total of column D in the D16 cell. So this is the formula we need to create.
=SUM(D2:D15)
Now let’s see how to add this using VBA. Let’s name this subroutine as SumFormula.
Sub SumFormula()
End Sub
First let’s declare a few variables.
Dim WS As Worksheet
Dim StartingRow As Long
Dim EndingRow As Long
Assign the worksheet to the variable.
Set WS = Worksheets("Sheet3")
Assign the starting row and the ending row to relevant variables.
StartingRow = 2
EndingRow = 1
Then the final step is to create the formula with the above variables.
WS.Range("D16").Formula = "=SUM(D" & StartingRow & ":D" & EndingRow & ")"
Below is the full code to add the Sum formula using VBA.
Sub SumFormula()
Dim WS As Worksheet
Dim StartingRow As Long
Dim EndingRow As Long
Set WS = Worksheets("Sheet3")
StartingRow = 2
EndingRow = 15
WS.Range("D16").Formula = "=SUM(D" & StartingRow & ":D" & EndingRow & ")"
End Sub
If function is a very popular inbuilt worksheet function available in Microsoft Excel. This function has 3 arguments. Two of them are optional.
Now let’s see how to add a If formula to a cell using VBA. Here is a typical example where we need a simple If function.
This is the results of students on an examination. Here we have names of students in column A and their marks in column B. Students should get “Pass” if he/she has marks equal or higher than 40. If marks are less than 40 then Excel should show the “Fail” in column C. We can simply obtain this result by adding an If function to column C. Below is the function we need in the C2 cell.
=IF(B2>=40,"Pass","Fail")
Now let’s look at how to add this If Formula to a C2 cell using VBA. Once you know how to add it then you can use the For Next statement to fill the rest of the rows like we did above. We discussed a few different ways to add formulas to a range object using VBA. For this particular example I’m going to use the Formula property of the Range object.
So now let’s see how we can develop this macro. Let’s name this subroutine as “AddIfFormula”
Sub AddIfFormula()
End Sub
However we can’t simply add this If formula using the Formula property like we did before. Because this If formula has quotes inside it. So if we try to add the formula to the cell with quotes, then we get a syntax error.
There are two ways to add the formula to a cell with quotes.
Sub AddIfFormula_Method1()
Dim WS As Worksheet
Set WS = Worksheets("Sheet4")
WS.Range("C2").Formula = "=IF(B2>=40,""Pass"",""Fail"")"
End Sub
Sub AddIfFormula_Method2()
Dim WS As Worksheet
Set WS = Worksheets("Sheet4")
WS.Range("C2").Formula = "=IF(B2>=40," & Chr(34) & "Pass" & Chr(34) & "," & Chr(34) & "Fail" & Chr(34) & ")"
End Sub
Finally I will show you how to add a vlookup formula to a cell using VBA. So I created a very simple example where we can use a Vlookup function. Assume we have this section in the Sheet5 of the same workbook.
So here when we change the name of the student in the C2 cell, his/her pass or fail status should automatically be shown in the C3 cell. If the original data(data we used in the above “If formula” example) is listed in the Sheet4 then we can write a Vlookup formula for the C3 cell like this.
=VLOOKUP(Sheet5!C2,Sheet4!A2:C200,3,FALSE)
We can use the Formula property of the Range object to add this Vlookup formula to the C3 using VBA.
Sub AddVlookupFormula()
Dim WS As Worksheet
Set WS = Worksheets("Sheet5")
WS.Range("C3").Formula = "=VLOOKUP(Sheet5!C2,Sheet4!A2:C200,3,FALSE)"
End Sub