Tom’s Tutorials For Excel: Fill Formula to Last Used Row

Tom’s Tutorials For Excel: Fill Formula to Last Used Row

The picture on the left shows a list of numbers in column A starting in cell A2. You have a formula in cell B2 which you want to quickly copy down to the last used cell in column A.

With cell B2 selected, position your mouse directly over the fill handle (that tiny black square in the lower right corner of the active cell) until the mouse cursor looks like a crosshairs, as pointed at by the red arrow. Double-click the left mouse button to fill the formula down as shown.

In a macro, you can declares a variable for the last used row in column A and fill the formula in cell B2 down to the corresponding cell in column B.

The example formula as shown in the address bar in the picture is =$A2+1

The VBA equivalent of that formula is =RC1+1 so a macro could be:

Sub FormulaFill()
Dim LastRowColumnA As Long
LastRowColumnA = Cells(Rows.Count, 1).End(xlUp).Row
Range("B2:B" & LastRowColumnA).Formula = "=RC1+1"
End Sub
Share Button
Posted in Tom's Tutorials for Excel
Tags: , , , , , , , , , , , , , ,
61 comments on “Tom’s Tutorials For Excel: Fill Formula to Last Used Row
  1. Hareesh says:


    i tried u r macro as it is

    Sub FormulaFill()

    Dim LastRowColmA As Long

    LastRowColmA = Cells(Rows.Count, 1).End(xlUp).Row

    Range(“B2:B” & LastRowColmA).Formula = “=RC1+1”

    End Sub

    But result is

    Number Number +1
    79 1
    46 1
    94 1
    52 1
    68 1
    97 1
    24 1
    53 1
    51 1
    58 1
    74 1

    Pls correct me, where i did wrong

    • Tom Urtis says:

      What is in cell A1? The formula works, so does the macro, so I wonder if you are referring to cells that actually have numbers in them, as opposed to cells with nothing in them, or text in them.

      Try replacing this line
      Range(“B2:B” & LastRowColmA).Formula = “=RC1+1”
      with this instead
      Range(“B2:B” & LastRowColmA).Formula = “=RC[-1]+1”

  2. Saravana Kumar says:

    I am also working same kind of file but my requirement is. I have to fill date for the Last row in Y25″.
    But I have some other data in “A” column as well
    X Y
    5 Customer/BDM In-charge
    6 TOTAL
    7 SDL
    8 Mascot
    13 Farhan Cutlerywala
    16 Iris Teu
    17 June Hung
    19 NICKY ONG
    22 Partha Guha

    Grand Total 5
    7,796 6
    2,680 7
    7,555 8
    12,626 9
    44,699 10
    12,224 11
    14,226 12
    20,905 13
    122,710 14
    50,055 15
    (261) 16
    192,011 17
    29,575 18
    16,415 19
    (53,965) 20
    115,759 21
    349,588 22
    237,566 23
    (62) 24
    50,846 25
    84,564 26
    (2,139) 27
    485,477 28
    1,370 29
    857,622 30

  3. Roopak Haridasan says:

    Hi Tom

    I have a similar script

    Sub FillFormula()
    Range(“Q2”).Formula = “=SUM(H2+I2)”
    Range(“Q2”, “Q” & Cells(Rows.Count, “A”).End(xlUp).Row).FillDown
    End Sub

    I am trying to perform a simple addition and place the result in Column Q. If I have more than 1 line of data the formula works. But, if i only have one line the macro doesnt seem to place the result of the formula in cell Q2. i think the result gets deleted due to fill down. Also for example, if I didn’t have any data, then it copies the headings in Q1 and repeats that in Q2. Are you able to explain how i could possibly fix the macro?


    • Tom Urtis says:

      Hello Roopak – –

      This will cover all your possibilities, including if there is no value in cell A2, or just cell A2 has a value, or many cells in column A have values in them

      Sub FillFormula()
      Dim LastRow As Long
      LastRow = Cells(Rows.Count, 1).End(xlUp).Row
      If LastRow > 1 Then Range("Q2:Q" & LastRow).FormulaR1C1 = "=RC[-9]+RC[-8]"
      End Sub

      • Rav S. says:

        Hi, this is great. thank you.

        I have another file where I need to autofill. Columns A:E, There are values in multiple rows and there are blank rows in between these values. I like to autofill every blank cell (A:E) with the value above.


        A b c d e
        1 2 3 4 5 (fill this down to next)

        6 7 8 9 4 (fill this down to nex)

        3 5 6 7 4

  4. Roopak Haridasan says:

    Hi Tom

    Thanks heaps for your help. In my comment earlier i had used an example. But the actual code i use is as follows. Is there a way i could use something similar in the FormulaR1C1 space? As in can i just copy my If statement as per below script and paste it? Would it perform the calculations correctly?

    Range(“R2”).Formula = “=IFERROR(ROUND(IF(N2=””EQUITY””,MIN(G2,MAX(40,J2*0.6%)),MIN(G2,MAX(30,J2*0.4%))),2),0)”
    Range(“R2”, “R” & Cells(Rows.Count, 1).End(xlUp).Row).FillDown

    Range(“S2”).Formula = “=IFERROR(ROUND(IF((G2-R2)<0,0,(G2-R2)),2),0)/IFERROR(VLOOKUP($K2,'Daily FX Rate'!$A:$P,HLOOKUP($F2,'Daily FX Rate'!$B:$P,2,FALSE),FALSE),"""")"
    Range("S2", "S" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown

    Range("T2").Formula = "=IFERROR((G2/J2),"""")"
    Range("T2", "T" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown

    Range("U2").Formula = "=IFERROR(MONTH(K2),"""")"
    Range("U2", "U" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown

    • Tom Urtis says:

      Your original question’s example is quite a bit different than your actual code example, but the concepts are the same as to what I posted to your original question, so just modify your codes accordingly. You can answer your own question about if it would perform the calculation correctly if you go ahead and test it to see for yourself.

  5. Roopak Haridasan says:

    Hi Tom

    I am trying to filter zeros out of a data range (which is not a table) using a macro. But unfortunately something is wrong with the last line of the macro. Are you able to please let me know what is wrong with my code here?

    Sub Macro3()
    Dim Source As Variant
    Dim LastRow As Long
    Dim criteria As String

    Source = ActiveWorkbook.Name
    ActiveSheet.Range(“I3:J”).AutoFilter Field:=2, Criteria1:=”0″, Operator:=xlFilterValues

    End Sub

    • Tom Urtis says:

      My first suspicion would be to edit the last line of the macro for a specific range including the last row. You have I3:J but no last row number for column J.

  6. Roopak Haridasan says:

    Gotcha.. It worked now.. I amended the formula .. Thanks again

  7. Roopak Haridasan says:

    Sorry another troubling question.. How do you write this expression in VBA

    =”Test”&” “&PSheet1!$A$3&” “&sheet1!$B$3

    I am trying to write this expression in the vba code below

    Range(“I2:I” & Lastrow).Formula = “=”Test”&” “&PSheet1!$A$3&” “&sheet1!$B$3”

  8. Roopak Haridasan says:


    I am looking for a VBA to open a workbook (FX rate log) from a specific file path and the look for a specific date (Today()-1) and copy the rows including the date and various currency rates to another workbook (Working model) within worksheet (FX Rate).

    Data layout in FX Rate log – (Worksheet “Sheet 1)

    05/06/2019 0.9456 0.7665 0.7789 5.4321
    06/06/2019 0.9457 0.7890 0.7898 5.6543
    07/06/2019 0.9467 0.7564 0.6987 5.3215

    Working Model – (Worksheet “FX Rate”)

    05/06/2019 0.9456 0.7665 0.7789 5.4321
    06/06/2019 0.9457 0.7890 0.7898 5.6543

    I would like to get the entire row of 07/06/2019 from FX rate log without the headings under the working sheet . In the working model workbook I have the date 07/06/2019 in cell “B2” of sheet 1 which I change daily for reporting. So if the macro could use that date as a reference it would be even better so I can ignore Today()-1



  9. Max says:

    Hi Tom!
    I have a range of 8 digits numbers in the “A” column and I need to fill the “B” column with the formula that takes the first 4 digits of those numbers. I tried to apply your code for this case:

    Sub FormulaFill()

    Dim LastRowColumnA As Long

    LastRowColumnA = Cells(Rows.Count, 1).End(xlUp).Row
    Range(“B2:B” & LastRowColumnA).Formula = “=Left(A2;4)”

    End Sub

    Still it doesnt work and I get an error. Could you please have a look at my problem?

    Thank you for your help in advance,


  10. Taya says:

    Hi Tom,
    I’m creating a macro to help with the batch renaming of files. I have 4 formulas I need to autofill down to the end of the data in the adjacent column (D), populating E, and so forth. Because there won’t always be the same amount of files to rename, I’m not sure how to create the macro so that it ends at the end of my data. Right now this below works because I placed the end row of “E9999” but this is obviously not ideal, and I have to delete a lot of extraneous data. I apologize for the beginner errors, I’m very new and self-taught. Greatly appreciate ANY help whatsoever!

    Some formatting takes place before this, but here’s my problem area:

    ActiveCell.FormulaR1C1 = “=CONCATENATE(“”.””,RC[-1])”
    Selection.AutoFill Destination:=Range(“E1:E9999”)

    ActiveCell.FormulaR1C1 = “=CONCATENATE(RC[-5],RC[-1])”
    Selection.AutoFill Destination:=Range(“F1:F9999”)

    ActiveCell.FormulaR1C1 = “=CONCATENATE(“”””””””,RC[-1],””””””””)”
    Selection.AutoFill Destination:=Range(“G1:G9999”)

    ActiveCell.FormulaR1C1 = “=CONCATENATE(“”ren “”,RC[-6], “” “”,RC[-1])”
    Selection.AutoFill Destination:=Range(“H1:H9999”)

    End Sub

    • Tom Urtis says:

      Hello Taya – –

      I was out of town, traveling on business and just saw this. Is this still an open item or have you found a solution?

      • Taya says:

        Still need a solution if possible, thank you!!

        • Tom Urtis says:

          Try this

          Dim myLastRow&
          myLastRow = Cells(Rows.Count, 4).End(xlUp).Row
          Application.ScreenUpdating = False
          Range("E1:E" & myLastRow).FormulaR1C1 = "=CONCATENATE(""."",RC[-1])"
          Range("F1:F" & myLastRow).FormulaR1C1 = "=CONCATENATE(RC[-5],RC[-1])"
          Range("G1:G" & myLastRow).FormulaR1C1 = "=CONCATENATE("""""""",RC[-1],"""""""")"
          Range("H1:H" & myLastRow).FormulaR1C1 = "=CONCATENATE(""ren "",RC[-6], "" "",RC[-1])"
          Application.ScreenUpdating = True

  11. Justin G says:

    Good Afternoon,

    In my macro I am simply trying to have the formula that is in A2 fill all the way down column A to where the last data row of column B. The rows in column B will be variable. This range is currently “A2:A5000” but I would like it to be “A2:A(last data row of B).” Can you take a look and let me know how I can achieve this?

    Sub MontlyStatements()

    ‘ MontlyStatements Macro
    ‘ Delete Row 1; Delete Column K; Insert new Column A and titel it “Balance Due;” Enter formula in A2 and drag to final cell; Copy Column A and paste as Values

    ‘ Keyboard Shortcut: Ctrl+i

    Selection.Delete Shift:=xlUp
    Selection.Delete Shift:=xlToLeft
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveCell.FormulaR1C1 = “Balance Due”
    ActiveCell.FormulaR1C1 = _
    “=SUMIF(C[7],RC[7],C[12])+SUMIF(C[7],RC[7],C[13])” & Chr(10) & “+SUMIF(C[7],RC[7],C[14])+SUMIF(C[7],RC[7],C[15])” & Chr(10) & “+SUMIF(C[7],RC[7],C[16])+SUMIF(C[7],RC[7],C[17])”
    Selection.AutoFill Destination:=Range(“A2:A5000”)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    End Sub

    • Tom Urtis says:

      Try this:

      Sub Test1()
      Application.ScreenUpdating = False
      Range("A1").Value = "Balance Due"
      Dim LastRow As Long
      LastRow = Cells(Rows.Count, 2).End(xlUp).Row
      With Range("A2:A" & LastRow)
      .FormulaR1C1 = _
      "=SUMIF(C[7],RC[7],C[12])+SUMIF(C[7],RC[7],C[13])" & Chr(10) & "+SUMIF(C[7],RC[7],C[14])+SUMIF(C[7],RC[7],C[15])" & Chr(10) & "+SUMIF(C[7],RC[7],C[16])+SUMIF(C[7],RC[7],C[17])"
      .Value = .Value
      End With
      Application.ScreenUpdating = True
      End Sub

  12. Scott monk says:

    Hi please could you help with a macro I’m getting an error with , I’m trying to add a formula so it drags down to the last active row

    Selection.AutoFill Destination:=Range(“C5:C” & Range(“B” & Rows.count).End(xlUp).Row)
    Range(Selection, Selection.End(xlDown)).Select

    Last rows to go down to would be column B and I’m trying to drag down c5 to l5 down to last row

    • Tom Urtis says:

      Hello Scott – –

      Just to clarify please, you want formula(s) to be copied down to the row of last used cell in column B? That’s no problem but I want to first make sure I understand…
      • if the formula to be copied down is only in column C.
      • if the formulas to be copied down are in columns C, D, E, F, G, H, I, J, K, and L.
      • if the first row of the formula(s) is row 5.

      • Scott monk says:

        Hi, thanks for the reply , yes the formulas are in columns C, D, E, F, G, H, I, J, K, and L all need to be drag down to what ever the last row is in column b.

        All the formulas are in row 5

        • Tom Urtis says:

          You can do it with this one-liner:

          Range("C5:L5").Copy Range("C6:L" & Cells(Rows.Count, 2).End(xlUp).Row)

          • Scott monk says:


            thanks, but it didn’t seem to work it’s says copy method of range class failed.

            Before this end with
            “Activecell.offset(0, -6).range(“A1:J1”). Select”

            Do I need to put anything in between these?

            • Tom Urtis says:

              Yes it does work, I tested it before posting it.

              I do not understand why you have this in your last reply, or what relevance it has to the question you asked:
              Before this end with
              “Activecell.offset(0, -6).range(“A1:J1”). Select”

              What I wrote was,
              “You can do it with this one-liner”

              That meant what it said.
              Your 3 lines of original code were this:
              Selection.AutoFill Destination:=Range(“C5:C” & Range(“B” & Rows.count).End(xlUp).Row)
              Range(Selection, Selection.End(xlDown)).Select

              My one line of code did that as you asked about.
              Range("C5:L5").Copy Range("C6:L" & Cells(Rows.Count, 2).End(xlUp).Row)

  13. Scott monk says:


    My original formula didn’t work that’s why I needed a new one , this one doesn’t work when I try it .

    • Tom Urtis says:

      Describe what “doesn’t work” means. The line of code I posted does work because it does what you sad you wanted, which is to copy formulas in C5:L5 down to the row of the last used cell in column B.

  14. Al Vinstro says:

    Hey Tom,

    In my sheet I am entering data into column A every entry, but not every entry column B. I need Column B to auto fill its last value to match my last row in column A.
    Here’s what I have Right now:

    Dim LastPopulatedRow As Long
    Dim LastInM As Long

    ‘Find last populated row
    LastPopulatedRow = Range(“A” & Rows.Count).End(xlUp).Row
    LastInM = Range(“B” & Rows.Count).End(xlUp).Cells
    ‘Select the rows where formula is to be populated
    Range(LastInB & “B” & LastPopulatedRow).FillDown

    I’m mostly having trouble using the last input in B for the fill

    If you could help or know a better way to to this I’d appreciate it.


    • Tom Urtis says:

      Not exactly sure what you are saying because this already fills to the last value in column A. Maybe all you need is to change a 2 to a 1 as shown:

      Instead of this original line of code…
      LastRowColumnA = Cells(Rows.Count, 1).End(xlUp).Row

      …change it to this:
      LastRowColumnA = Cells(Rows.Count, 2).End(xlUp).Row

      • Al Vinstro says:

        Thanks for the reply,

        Right now I’m getting a run time error 1004 it says method range of object_Global Fail.
        I’ve changed A to K and B to M.

        Dim LastRowColumnK As Long
        Dim LastRowColumnM As Long

        LastRowColumnK = Cells(Rows.Count, 11).End(xlUp).Row
        LastRowColumnM = Cells(Rows.Count, 13).End(xlUp).Row

        Range(LastRowColumnM & “M” & LastRowColumnK).FillDown

        I think it doesn’t know what to use to fill.

        This code works:

        Dim LastRowColumnK As Long
        Dim LastRowColumnM As Long

        LastRowColumnK = Cells(Rows.Count, 11).End(xlUp).Row
        LastRowColumnM = Cells(Rows.Count, 13).End(xlUp).Row

        Range(“M4: ” & “M” & LastRowColumnK).FillDown

        it will copy M4 to the last row of K. I need it to copy the last value recorded in M not M4 every time.

        Hopefully this makes more sense.


        • Tom Urtis says:

          Your question is confusing.
          You say that some code works but that it does not do what you want which to me means it does not work.

          Just answer these questions:
          (1) What does column K have to do with column M. By that I mean, which of those 2 columns has more data in it BEFORE you run the macro.
          (2) Yes or No: Is there a formula in cell M4 that is ALREADY EXISTING and you want to copy it down column M until it reaches a certain row?
          (3) If the answer to (2) is Yes, then what determines what that certain row is?
          (4) If the answer to (2) is No, then you have totally lost me.

  15. karmu singh says:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    ‘Sub Myautofill()

    If Range(“A1”) “” Then

    Selection.AutoFill _
    Destination:=Range(“A1:A5”), Type:=xlFillDefault
    ‘End With
    ‘Range(“A1”).Formula = “=IF(AND(F5=””,G5=””,H5=””),””,(I4+F5-G5-H5))”
    End If
    ‘End With
    End Sub
    ols correct me

    • Tom Urtis says:

      There are a couple of competing actions happening in your code. Please explain with words what you are trying to accomplish, and especially, say what an example is in cell A1 and what results after the macro would be in range A2:A5. I can’t tell what exactly it is that you want to do.

  16. Carin says:

    I am trying to autofill column G based on the last row on column A by using this code:
    Dim lastRows As Long
    lastRows = Range(“A” & Rows.Count).End(xlUp).Row
    Range(“G2”).AutoFill Destination:=Range(“G2:G” & lastRow)

    However, earlier in the macro column A had more rows which were deleted. The above macro is autofilling down to the orignal row number before the rows were deleted. How do I get the macro to just see what is currently occupying column A?

    • Tom Urtis says:

      Are you 100% positive that there is no lingering item in any cell in column A.

      Is there a reason why you are using AutoFill. What is in cell G2 that you ar efilling down… a formula, or text, or a number series? There might be another way to do this depending on what you are working with.

  17. Julia says:

    Can you please help me with this macro below?
    ActiveCell.FormulaR1C1 = “=VLOOKUP(RC[-8]:R[27]C[-8],CPQ.txt!C1:C3,3,FALSE)”
    Selection.AutoFill Destination:=Range(“M3:M30”)
    I want to autofill column M until the last active row in E.

    • Tom Urtis says:

      Assuming your VLOOKUP function works as you presented it here, and further assuming your VLOOKUP formula is first entered into cell M2, then this is what you want:

      Range("M2:M" & cells(rows.count, 5).End(xlUp).Row).FormulaR1C1 = "=VLOOKUP(RC[-8]:R[27]C[-8],CPQ.txt!C1:C3,3,FALSE)"

  18. Amanda says:

    I would be very glad if you could help me.
    I want to add a filter according to the value on “F3” (it will change but the right now value is equal to “2S24J”) but the I could only add the filter as a constant value not a variable.
    ActiveSheet.Range(“$A:$D”).AutoFilter Field:=2, Criteria1:=”2S24J”

    • Tom Urtis says:

      Could you not just do this?
      ActiveSheet.Range(“$A:$D”).AutoFilter Field:=2, Criteria1:=Range(“F3”).Value

      • Amanda says:

        Nope, it doesn’t work.

        • Tom Urtis says:

          What does “it doesn’t work” mean. Do you get a run time error or nothing gets filtered, or the wrong rows get filtered.

          Assuming your cell F3 is on the same worksheet as the filter, and assuming there are no merged cells involved, try a variable declaration:

          Dim strFilterCriteria as String
          strFilterCriteria = Range(“F3”).Value
          ActiveSheet.Range(“$A:$D”).AutoFilter Field:=2, Criteria1:=strFilterCriteria

          It could be that your range to filter should be defined better than just the full columns, such as Range(“A1:D1000”), and also, I do not see where you specify the first row of the range being filtered.

          • Amanda says:

            Sorry, I forgot to explain the error.
            Yes, it is on the same worksheet and no merged cells involved.

            I have tried new one(Dim strFilterCriteria as String
            strFilterCriteria = Range(“F3”).Value
            ActiveSheet.Range(“$A:$D”).AutoFilter Field:=2, Criteria1:=strFilterCriteria)

            it gives the run time error. when I click on debug, it highlights the line which contains “strFilterCriteria = Range(“F3”).Value”
            You can see the error below:
            Run-time error’1004′.
            Method ‘Range’ of object ‘_Global’failed.

            Please let me know if you need further information

            • Tom Urtis says:

              As I said, I would specify the actual range instead of the full columns, and I asked if any cells are merged. Maybe what cell F3 visually shows is really an underlying value that the filter does not like, such as a custom format. Something is going on with either the filter range or the criteria cell.

  19. Zarir Suntook says:

    Dear Tom,

    I am not a member of any forum so I, not sure if I am entitled to ask you for guidance. But just in case you agree to offer your guidance, here is my problem:

    I am quite familiar with filling down a series with reference to the number of rows in another column. What I am looking for is code that enables me to fill a series down to a maximum amount specified (without reference to any other column).
    For example, if I start with an entry in say cell D5: D4*0.8, with cell D4 showing say 15000, then fill down the series, what code should I use to make the series stop before it gets below say 1000?

    If you do agree to offer your help, will I receive an email or will it appear on this website?

    Kind regards,

    Zarir Suntook

    • Tom Urtis says:

      Regarding your example scenario, there must be some way for Excel to know that the series should stop before it gets to row 1000. Unless you mean that the example of 1000 is not related to a row number but to the formula’s return result number. So that important piece of information is not clear from your message.

      • Zarir Suntook says:

        Sorry Tom, I should have made it clear that the 1000 in my example relates to the formula’s return result number – NOT the row number (for which I’m able to do the coding).

        • Tom Urtis says:

          No problem, thanks for clarifying.

          If it were me, I would approach this one of 2 ways.

          If I knew that your example was really the case, that it can be 1500 formulas or more, then I would fill the range with some reasonably excessive formulas that I knew would surpass the limit, then search for the first cell that exceeds the limit and delete the formulas from that cell on.

          The other option is if it would only be a relatively few cells, I would enter the formulas in a loop up to the point where the formula’s pre-evaluated limit would not be entered.

          All possible with VBA, but that is how I would approach this, just my take.

  20. Zarir Suntook says:

    Many thanks, Tom, for your suggestions. I have in fact already used your first option, which works fine, except that as you say I need to set a range that I believe would exceed the designated limit and then delete the following formulas.
    I wonder, however, if you could please give me the VBA code for your second option that would apply to my example, ie to enter the formulas in a loop up to the point where the formula’s pre-evaluated limit (1000 in my example) would not be entered. That really is where my VBA knowledge is lacking. Many thanks for all your time.

    • Tom Urtis says:

      Assuming cell D4 contains the number 100, this is one way, albeit a bit clunky-looking but more efficiant than cell by cell pre-evaluations.

      Sub Test1()
      Application.ScreenUpdating = False
      Dim NumberLimit As Double, lngRow As Long
      NumberLimit = 10
      lngRow = 4
      lngRow = lngRow + 1
      Cells(lngRow, 4).FormulaR1C1 = "=R[-1]C*0.8"
      Loop Until Cells(lngRow, 4).Value < NumberLimit With Cells(lngRow, 4) If .Value < NumberLimit Then .ClearContents End With Application.ScreenUpdating = True End Sub

  21. Zarir Suntook says:

    That’s brilliant, Tom – it works perfectly and I’ve learnt something valuable about VBA Looping code.
    Kind regards,
    PS: I now know whom to come to when I need help!

Leave a Reply

Your email address will not be published. Required fields are marked *