【问题标题】:Automatic character replacement excel自动字符替换excel
【发布时间】:2016-07-12 14:07:34
【问题描述】:

我已经检查了各种网站上的各种示例,但在 Excel 2013 的单元格中输入字符 (.) 时,我找不到自动替换字符 (.) 的方法。

我想要的是能够替换“。”什么都没有,或者更确切地说删除点。它将是数字的一部分,例如 33.33.2320,应编辑为 33332320。同时保留尾随零或任何前导零。

如果可能的话,我想在 Excel 中对整个列执行此操作。 点可以手动输入或复制/粘贴,并且需要在这样做时自动删除。

我已经尝试过使用宏、替代等,但如果你明白我的意思,那似乎是在“运行时”之后采取的行动。

数据验证实际上在输入值时停止,这不是我想要的。如果有人手动输入点或复制/粘贴,则应将其删除。

谢谢

【问题讨论】:

  • 它被称为查找/替换...这不是一个真正的编程问题...
  • Worksheet_Change 事件不起作用?

标签: excel replace character


【解决方案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 = FalseApplication.EnableEvents = True。如果我们更改 Worksheet_Change 中的工作表单元格,我们必须禁用事件以防止无限循环。此外,我们必须稍后激活事件,因为如果没有,从此时起不会运行任何事件过程。


这有一个问题。如果输入001.234,则前导零将丢失。这是因为 change 事件在 输入之后开始,然后数字已经是 1.234。在我看来,这是没有办法的。 001.234.567 将起作用,因为它假定为数字而是字符串。


如果可能,您可以将整列设置为Text 数字格式。这将解决问题。但是在此列中无法再输入数字。

【讨论】:

  • 您是否检查以确保它保持前导/尾随零。您可能需要将Replace ... 包裹在Cstr
  • Replace 将返回一个字符串。如果需要得到一个数字——它永远不会有前导零——那么我们需要有数字格式Text
  • 这个我已经提过了。这与001.234 的问题相同。您应该将整列设置为文本数字格式。这将解决问题。这也已经提到了。
  • EnableEvents 最好在循环外使用。
  • 阿克塞尔,非常感谢!!那是完美的。我使用了你提供的代码,在编译期间我收到了一个错误,替换函数的参数数量错误,然后查看它,看起来我需要使用的内部函数:“VBA.Strings.Replace”编译成功现在我可以输入带有前导/尾随零的数字,并且所有数字都保留不带小数。
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多