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
- Enable iterative calculation for the spreadsheet.
- Put the trigger value, such as status, in column B.
- Put the self-referencing formula in column C.
- Enter a value in
B2and recordC2. - Wait, edit
B2again, and confirmC2does not change. - Enter a value in
B3and confirmC3records 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.