Automatically Adjust Duplicate Dates in Google Sheets

Published on

Managing schedules, subscriptions, or recurring tasks in Google Sheets can get tricky when dates repeat across rows. Imagine you have a list of items that are subscribed every month — you might duplicate the same row 12 times for a year. Without adjusting the dates, all 12 rows would show the same start date, which makes tracking and reporting confusing.

Duplicated subscription data with monthly incremented dates in Google Sheets

This is where automatically adjusting duplicate dates in Google Sheets becomes a lifesaver. In this tutorial, we’ll walk you through how to:

  • Duplicate rows for recurring events or subscriptions.
  • Increment dates by day, month, or custom intervals.
  • Handle open ranges and avoid errors with blank rows.

By the end, you’ll have a clean, automated workflow that saves time and reduces mistakes when dealing with repeating dates.

Sample Data for Duplicate Records

Here’s the sample data we’ll use in Sheet1 (A1:D):

Subscription data in Google Sheets with dates and descriptions

We want to duplicate each row based on the “No. of Times in a Year” column.

Duplicate Records Formula

To duplicate the records automatically in Sheet2, use the following formula in cell A2:

=ARRAYFORMULA(
     VLOOKUP(
        TRANSPOSE(SPLIT(QUERY(REPT(ROW(Sheet1!A2:A)&" ", Sheet1!D2:D),,9^9), " ")),
        {ROW(Sheet1!A2:A), Sheet1!A2:D},
        {1, 2, 3}+1,
        0
     )
)

Notes:

  • Sheet1!A2:A → first column of your data.
  • Sheet1!D2:D → number of times to repeat each record.
  • Sheet1!A2:D → actual data range.
  • {1, 2, 3} → columns to repeat.

After this, select column A, then go to Format > Number > Date to ensure proper date formatting.

Duplicated subscription records in Google Sheets before adjusting dates

For a deeper dive on duplicating rows, you can check out How to Insert Duplicate Rows in Google Sheets.

Automatically Adjust Duplicate Dates by Month

Once rows are duplicated, the next step is to increment the dates so each duplicate shows the next month.

Our sample data includes a category column (like “Description”), which is important because if multiple categories share the same date, we want to increment dates per category, not across the entire column.

Formula for Simple Increment (No Categories)

If you just want to increment dates without considering categories, use this formula in a new column:

=ARRAYFORMULA(LET(
    dts, A2:A,
    rc, COUNTIFS(dts, dts, SEQUENCE(ROWS(dts)), "<="&SEQUENCE(ROWS(dts)))-1,
    IFERROR(EDATE(dts, rc))
))
Automatically adjust duplicate dates by month in Google Sheets

Explanation:

  • EDATE(start_date, [months]) → advances each date by the number of months specified in [months].
  • rc → a running count of duplicates starting at 0, representing the number of months to add. For example, if a row is duplicated 12 times, rc will count 0, 1, 2…11, effectively adding 0 to 11 months to the original date.
  • ARRAYFORMULA → allows the formula to apply automatically to the entire column.

Format the results as Date to see the incremented monthly schedule.

Formula for Increment by Category

If your dataset has a category column, like “Description”, you need to tweak the formula so that duplicates are counted per category. Without this, duplicates from other categories with the same date would incorrectly affect the count.

=ARRAYFORMULA(LET(
    dts, A2:A,
    cat, B2:B,
    rc, COUNTIFS(dts&cat, dts&cat, SEQUENCE(ROWS(dts)), "<="&SEQUENCE(ROWS(dts)))-1,
    IF(dts, IFERROR(EDATE(dts, rc)),)
))

Note:

You won’t see any differences between the category and non-category formulas in this example because there are no duplicate subscription periods in the sample data. The distinction only matters when multiple rows share the same start date within different categories.

How it works:

  1. dts → stores the date column.
  2. cat → stores the category column.
  3. COUNTIFS(dts&cat, dts&cat, SEQUENCE(ROWS(dts)), "<="&SEQUENCE(ROWS(dts)))-1 → calculates a running count for each date within each category.
  4. EDATE(dts, rc) → adds the running count as months to each original date.
  5. IF(dts, ..., ) → ensures empty rows are ignored.

This ensures that:

  • Multiple categories with the same start date are handled separately.
  • Dates increment correctly within each category.
  • Blank rows do not produce errors.

Why This Formula Works

Even though it looks complex, it’s essentially combining three things:

  1. EDATE → advances dates by a specific number of months.
  2. COUNTIFS + SEQUENCE → creates a running count of duplicates (per category if needed).
  3. LET → organizes variables (dts, cat, rc) to make the formula easier to read and maintain.

For a deeper understanding of running counts, see Running Count in Google Sheets: Formula Examples.

Automatically Adjust Duplicate Dates by Day

If you need to increment by days instead of months, the formula is simpler:

=ARRAYFORMULA(LET(
    dts, A2:A,
    rc, COUNTIFS(dts, dts, SEQUENCE(ROWS(dts)), "<="&SEQUENCE(ROWS(dts)))-1,
    IF(dts, dts+rc,)
))
Automatically adjust duplicate dates by day in Google Sheets

And with categories:

=ARRAYFORMULA(LET(
    dts, A2:A,
    cat, B2:B,
    rc, COUNTIFS(dts&cat, dts&cat, SEQUENCE(ROWS(dts)), "<="&SEQUENCE(ROWS(dts)))-1,
    IF(dts, dts+rc,)
))

This increments each duplicate date by one day for each repetition, automatically handling multiple categories.

Wrapping Up

Using this method, you can:

  • Automatically duplicate rows based on a frequency column.
  • Increment duplicate dates by month or day.
  • Handle multiple categories without errors.
  • Create a scalable, automated workflow in Google Sheets for subscriptions, schedules, or recurring events.

No more manually updating 12 rows for each subscription — let Google Sheets do the work for you.

Resources

Prashanth KV
Prashanth KV
Your Trusted Google Sheets and Excel Expert Prashanth KV is a Diamond Product Expert in Google Sheets, officially recognized by Google for his contributions to the Docs Editors Help Community and featured in the Google Product Experts Directory. Explore his blog to learn advanced formulas, automation tips, and problem-solving techniques to elevate your spreadsheet skills.

Top Discussions

More like this

Pivot Table Formatting, Output & Special Behavior in Google Sheets

Pivot Tables in Google Sheets are powerful—but they can get tricky once you move...

Pivot Table Calculations & Advanced Metrics in Google Sheets

When it comes to built-in tools for data analysis and visualization in Google Sheets,...

Google Sheets Pivot Table Tutorial: Basics, Setup, and Date Grouping

The easiest way to summarize, analyze, and report data in Google Sheets is by...

4 COMMENTS

  1. Hello Prashanth,

    Thanks again for your amazing tutorials, really appreciate you taking the time to prepare and share these valuable tutorials.

    I have used this formula, and it works perfectly. Just need a bit of help as I have encountered the below challenge.

    For the two service providers, if they have the same date of renewal, the current formula will increment the dates continuously as if it’s just one service provider’s data.

    Can you make the formula restart incrementing the dates when you reach the next service provider even if they share the same renewal date?

    Many thanks in advance, Prashanth.

    • Hi, Charles K,

      Thank you very much for pointing out the error.

      We can solve it with a simple fix. Within COUNTIFS modify F2:F,F2:F with F2:F&G2:G,F2:F&G2:G.

      I have modified the formulas within the tutorial. Also, I have edited the sample sheet to incorporate those changes.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.