自动删除特殊字符
我有一个电子表格,我们将按照以下格式将电话号码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
因为它是工作表代码,所以安装和自动使用非常简单:
- 右键单击Excel窗口底部附近的选项卡名称
- select查看代码 – 这会popup一个VBE窗口
- 粘贴东西,closuresVBE窗口
如果您有任何疑问,请先在试用工作表上尝试。
如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除macros:
- 调出上面的VBE窗口
- 清除代码
- 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必须启用这个工作!
其他方式。
-
你不必循环所有的单元格。 设想一个用户复制10000行数据。
.Replace
整个列比循环遍历每个单元要快得多。 -
您可以继续添加到
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
现在用户将无法插入非数字字符