自动删除特殊字符

我有一个电子表格,我们将按照以下格式将电话号码inputD列:(253)796-0340。 我想使用VBA公式/函数自动删除任何括号,破折号或空格,因为我将它们粘贴到列D中的单元格中。当在单元格中粘贴下面的“旧值”时,它将被自动replace为“新价值“; 例如:

旧价值:(253)796-0340

新增值:2537960340

这个电子表格的一些用户不像Excel精明。 所以如果有办法让他们不需要访问源代码并运行这个function,那就太好了。

在工作表代码区域中包含以下事件macros:

Private Sub Worksheet_Change(ByVal Target As Range) Dim intr As Range, t As String Set intr = Intersect(Range("D:D"), Target) If intr Is Nothing Then Exit Sub Application.EnableEvents = False For Each r In intr t = Replace(Replace(r.Text, "-", ""), " ", "") r.Value = "'" & Replace(Replace(t, ")", ""), "(", "") Next r Application.EnableEvents = True End Sub 

因为它是工作表代码,所以安装和自动使用非常简单:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件macros(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

macros必须启用这个工作!

其他方式。

  1. 你不必循环所有的单元格。 设想一个用户复制10000行数据。 .Replace整个列比循环遍历每个单元要快得多。

  2. 您可以继续添加到MyList = "(|)| |-" 。 所有你想要replace的是用|分隔的 。 在将来的情况下,你想replace| 以及在deLim = "|"设置一个唯一的分隔符

 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyList As String, MyAr Dim deLim As String Dim i As Long '~~> Keep Adding whatever you want to replace MyList = "(|)| |-" deLim = "|" On Error GoTo Whoa Application.EnableEvents = False If Not Intersect(Target, Columns("D:D")) Is Nothing Then MyAr = Split(MyList, deLim) For i = LBound(MyAr) To UBound(MyAr) With Columns("D:D") .NumberFormat = "@" .Replace What:=MyAr(i), Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End With Next i End If Letscontinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume Letscontinue End Sub 

你想要做的一般想法是类似的 –

 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target.Value = Replace(Replace(Replace(Replace(Target.Value, "(", ""), ")", ""), "-", ""), " ", "") Application.EnableEvents = True End Sub 

每次在工作表中更改值时都会触发一个事件,并从input的值中删除所有不必要的字符。 请注意,这将适用于该代码应用于工作表内的每个单元格。

这听起来像你试图重新发明excel原生支持的古老的数据validation

例如,标记A列,然后selectdata选项卡和data validation

然后selectcustom并写入=INT(A1)=A1

现在用户将无法插入非数字字符