我有一个电子表格,其中的单元格我希望可供用户编辑,但当没有用户输入数据时,我也希望在其中设置“默认”或“占位符”值。这有几个很好的用例:
- 防止公式错误,同时在用户未输入(或删除)自己的值时提供合理的假设。
- 我可以使用条件格式来提醒用户默认值,以防止他们忽视这些值 - 然后他们可以做出明智的选择,确定该值是否仍然适合预期的计算。
- 给出要在单元格中输入的内容的简短描述,而不必有单独的“说明”部分或文档。这还可以消除对附近的“标签”单元格的需求,在某些情况下这确实不合适。
为了实现我想要的目标,我需要一些公式、脚本或其他高级电子表格选项来执行以下操作:
- 在用户输入数据之前在单元格中显示默认值。
- 当单元格中没有用户输入的数据时,允许任何引用该单元格的公式找到默认值。
- 允许用户自由地(自然地,就像他们对任何“正常”单元格所做的那样)用他们自己的值或公式覆盖显示的值,并让引用该单元格的任何公式找到用户输入的数据。
- 当单元格因删除用户输入而变空时,恢复为默认值。
有没有办法在 Excel 中做到这一点,或者我对电子表格程序的要求太高了?
答案1
没有内置的方法来做到这一点,您需要创建自己的方法。
一种可能性是:
- 对于您想要默认值的每个单元格,创建一个引用该单元格的工作表范围命名范围,然后在注释字段中输入所需的默认值
添加工作簿模块
Workbook_SheetChange
事件Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim nm As Name Dim cl As Range On Error Resume Next For Each cl In Target.Cells If IsEmpty(cl) Then For Each nm In Sh.Names If nm.RefersToRange.Address = cl.Address Then Application.EnableEvents = False If IsNumeric(nm.Comment) Then nm.RefersToRange.Value = Val(nm.Comment) Else nm.RefersToRange.Value = nm.Comment End If Application.EnableEvents = True Exit For End If Next End If Next End Sub
这样做的目的是:
- 每次更改单元格时都会运行事件代码
- 如果发生更改的单元格为空
- 查找引用单元格的工作表范围命名范围
- 如果发现将名称注释复制到单元格值中,则转换为数字是合适的
答案2
我使用的方法如下:
-- 学校记录的一个简单示例:
- col A 是行标题:学生证、姓氏、名字、出生日期、年龄……
- col B 是幽灵列:宽度 1,左对齐,增加缩进 1,受保护,字体颜色为灰色,无文本换行
- col C 是输入字段
-- 列 B 的值将加载您想要在列 C 中显示的任何内容作为默认值。值可以来自附带的辅助表、在单元格填写时更新的公式、具有默认值的另一个电子表格、错误消息……
-- 因此,当输入学生 ID 时,姓氏、名字、出生日期、地址、父母等会立即显示为下面行中的虚值。C 列单元格中没有任何内容,因此 B 列中的虚值会延伸到 C 列。(数字和日期值必须使用 text() 函数进行格式化。)在验证孩子的信息后,操作员继续填写课程表、班主任……
-- 如果需要更改单元格中输入的内容,则表示该孩子的情况有所不同。(姓氏、父母姓名、地址……)
——或者,可以输入姓氏和名字,将 ID 留空,幽灵值将显示主电子表格中的子 ID。
-- 辅助表可以显示辅助文本,一旦触摸 C 列中的单元格,该文本就会消失。或者,电子表格逻辑可以确定辅助文本不再合适或应该显示其他内容。
幽灵值是可搜索的,可以是灰色(表示默认文本)或红色(表示警告),并且会在随附电子表格更新时自动刷新。
一个限制是幽灵文本不能换行到 C 列。