如何实现O/S列复选框勾选时,P/T列填充固定勾选当日日期?
复选框勾选时填充固定日期的解决方案
Google Sheets 实现步骤
- 打开目标表格,点击顶部菜单栏的「扩展程序」>「Apps 脚本」。
- 删除编辑器里的默认代码,替换为以下脚本:
function onEdit(e) { const range = e.range; const sheet = range.getSheet(); const row = range.getRow(); const col = range.getColumn(); // 处理O列复选框,对应填充P列日期 if (col === 15 && range.isChecked()) { const targetCell = sheet.getRange(row, 16); if (targetCell.getValue() === "") { targetCell.setValue(new Date()); targetCell.setNumberFormat("yyyy-mm-dd"); // 可自定义日期格式 } } // 处理S列复选框,对应填充T列日期 if (col === 19 && range.isChecked()) { const targetCell = sheet.getRange(row, 20); if (targetCell.getValue() === "") { targetCell.setValue(new Date()); targetCell.setNumberFormat("yyyy-mm-dd"); } } }
- 保存脚本(点击编辑器顶部的保存按钮,给脚本命名即可)。
脚本说明:仅当O/S列的复选框被勾选,且对应P/T列单元格为空时,才会写入勾选当天的日期。后续无论表格如何更新,这个日期都会保持固定,不会自动刷新为当前日期。首次运行脚本时,需要按照提示完成授权操作。
Excel 实现步骤
- 打开目标表格,按下
Alt + F11组合键打开VBA编辑器。 - 在左侧「工程-VBAProject」窗口中,找到对应的工作表(比如「Sheet1」),双击打开代码编辑窗口。
- 粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 处理O列复选框,对应填充P列日期 If Not Intersect(Target, Me.Range("O:O")) Is Nothing Then If Target.Value = True Then If Me.Cells(Target.Row, "P").Value = "" Then Me.Cells(Target.Row, "P").Value = Date Me.Cells(Target.Row, "P").NumberFormat = "yyyy-mm-dd" End If End If End If ' 处理S列复选框,对应填充T列日期 If Not Intersect(Target, Me.Range("S:S")) Is Nothing Then If Target.Value = True Then If Me.Cells(Target.Row, "T").Value = "" Then Me.Cells(Target.Row, "T").Value = Date Me.Cells(Target.Row, "T").NumberFormat = "yyyy-mm-dd" End If End If End If End Sub
- 关闭VBA编辑器,保存表格时需选择
.xlsm格式(启用宏的工作簿)。
代码说明:当O/S列的复选框被勾选时,会自动在对应P/T列的空单元格中写入当天日期,日期固定不随后续操作更新。使用时需确保Excel启用了宏功能。
内容的提问来源于stack exchange,提问作者Jessica Danielle
相关产品推荐
相关产品推荐

