我已经检查了各种网站上的各种示例,在Excel 2013中的单元格中输入时,我无法找到自动替换字符(。)的方法。
我想要的是能够取代“。”什么都没有或者更确切地说是删除点它将是数字的一部分,如33.33.2320,应编辑为33332320.保留尾随零或任何前导零。
如果可能的话,我希望在整个专栏中使用Excel。 点可以手动输入或复制/粘贴,并且需要在执行此操作时自动删除。
我已尝试使用Macros,替代等,但如果您知道我的意思,那么这似乎是在“运行时”之后采取的行动。
数据验证实际上是从输入值中停止的,这不是我想要的。如果有人手动输入点或复制/粘贴它,就应该删除它。
由于
答案 0 :(得分:1)
您可以使用在Worksheet.Change Event发生时运行的宏。
在Excel中,右键单击要监听事件的工作表的“工作表名称”选项卡,然后选择View Code
。现在,您不在通用模块中,而是在工作表类模块中。
其中放了那个代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then 'only column 3 = C
For Each oCell In Target
If InStr(oCell.Text, ".") <> 0 Then
Application.EnableEvents = False 'We change workshheet cells within Worksheet_Change.
'So we must disable events to prevent endless loop.
oCell.NumberFormat = "@"
oCell.Value = Replace(oCell.Value, ".", "")
Application.EnableEvents = True
End If
Next
End If
End Sub
现在每次在此工作表中发生更改时,代码都会运行。如果更改位于列C
中且单元格包含“。”,则替换完成。
要保留前导零,则将单元格设置为Text
数字格式。
请注意Application.EnableEvents = False
和Application.EnableEvents = True
。如果我们在Worksheet_Change中更改工作表单元格,我们必须禁用事件以防止无限循环。此外,我们必须稍后激活事件,因为如果没有,则从此时起不会运行任何事件过程。
这有一个问题。如果输入001.234
,则前导零将丢失。这是因为更改事件在输入后开始,然后数字已经是1.234
。在我看来,没有办法解决这个问题。 001.234.567
将有效,因为不假设为数字,而不是字符串。
如果可能,您可以将整个列设置为Text
数字格式。这将解决问题。但是在这一栏中不再可能输入数字。