我想建立一个工作表,当用户在单元格中输入数字并且结束对该单元格的编辑时,这些数字会自动四舍五入到最接近的 0.25。我不想有两列,一列用于原始值,一列用于四舍五入值。这可能吗?如果可以;如何实现?
工作流程如下:
- 用户在单元格中输入 2.30
- 用户按 Tab 键跳至下一个单元格或按 Enter 键离开单元格
- 单元格值从 2.3 更改为 2.25
我还希望单元格的值为 2.25,我不希望该值为 2.30,而是格式化为 2.25。
答案1
在 VBA 中这很容易。只需创建此子程序:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Value = Round(4 * Target.Value) / 4
Application.EnableEvents = True
End Sub
每当工作表上的任何内容发生变化时,Excel 都会调用此例程。
Application.EnableEvents = False
语句暂时关闭此自动调用,以防止Target.Value = …
语句导致例程被递归调用。请参阅如何在 MS Office 中添加 VBA?
有关使用 VBA 的一般信息。
答案2
不使用 VBA 我能想到的最接近的方法是使用数据验证。它不会更改值,但会提醒用户他们输入了无效值。请注意,您可以通过从数据验证范围之外粘贴来“欺骗”Excel 中的数据验证,因此如果这很重要,那么这可能不是理想的解决方案。
应选择相关单元格,然后转到数据/验证,并选择允许“定制”,以及公式(=MOD(A2,0.25)=0
此公式适用于单元格 A2)。然后,您可以转到“错误警告”选项卡,将错误消息更改为“请在此单元格中输入以 0.25、0.5、0.75 或整数结尾的值”
将其推送到整个列的最佳方法是执行单个单元格,然后将其复制到许多其他单元格。数据验证应相应地移动(因此它不会总是基于单元格 A2 - 虽然这可能使用 $A$2 来实现)