Formula

If column B is the status and column C is the timestamp, put this in C2 and copy it down with the row:

=IF(B2<>"",IF(C2="",TEXT(NOW(),"yyyy-mm-dd hh:mm:ss"),C2),"")

This formula deliberately refers to its own cell, so iterative calculation must be enabled for the spreadsheet.

Test setup

We created a private sheet with two synthetic task rows. In File → Settings → Calculation, we turned iterative calculation on and kept recalculation set to On change. Both rows used the formula above with relative row references.

Tested steps

  1. Enable iterative calculation for the spreadsheet.
  2. Put the trigger value, such as status, in column B.
  3. Put the self-referencing formula in column C.
  4. Enter a value in B2 and record C2.
  5. Wait, edit B2 again, and confirm C2 does not change.
  6. Enter a value in B3 and confirm C3 records a later timestamp.

Run 1 recorded 2026-07-11 14:00:54. Editing the first status again left that value unchanged. Run 2 recorded 2026-07-11 14:00:59.

Why the timestamp stays fixed

When the status is non-empty, an empty timestamp cell evaluates NOW() once. On later recalculations, the formula sees its existing timestamp and returns that value instead. TEXT makes the captured result easy to compare and prevents display formatting from hiding the time.

When Apps Script is better

Use Apps Script instead when you need a true date-time value, centralized validation, multiple edit conditions, or behavior that should not depend on a workbook-wide iterative setting. This formula is best for a small controlled sheet where the circular reference is intentional and documented.