我有一個電子表格,我們將按以下格式將電話號碼輸入D列:(253)796-0340。我想使用VBA公式/函數自動刪除任何括號,破折號或空格,因爲我將它們粘貼到列D中的單元格中。當單元格中粘貼下面的「舊值」時,它會自動替換爲「新價值「;例如: -自動刪除特殊字符
舊值:(253)796-0340
新價值:2537960340
一些此電子表格的用戶都沒有爲Excel精明。所以如果有一種方法不讓他們需要訪問源代碼並運行該功能,那就太好了。
我有一個電子表格,我們將按以下格式將電話號碼輸入D列:(253)796-0340。我想使用VBA公式/函數自動刪除任何括號,破折號或空格,因爲我將它們粘貼到列D中的單元格中。當單元格中粘貼下面的「舊值」時,它會自動替換爲「新價值「;例如: -自動刪除特殊字符
舊值:(253)796-0340
新價值:2537960340
一些此電子表格的用戶都沒有爲Excel精明。所以如果有一種方法不讓他們需要訪問源代碼並運行該功能,那就太好了。
你會想要做的總體思路是什麼喜歡 -
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Value = Replace(Replace(Replace(Replace(Target.Value, "(", ""), ")", ""), "-", ""), " ", "")
Application.EnableEvents = True
End Sub
這是一個觸發間隔的值在工作表改變的時候,並刪除所有不必要的字符從價值的事件是進入。請注意,這將適用於此代碼應用於工作表內的每個單元格。
包含在工作表的代碼區以下事件宏:
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
因爲它是工作表的代碼,它是非常容易安裝和自動使用:
如果您有任何疑問,請先在試用工作表上嘗試。
如果保存工作簿,宏將與其一起保存。 如果您在2003年以後使用的是Excel版本,則必須將該文件保存爲.xlsm而非 。XLSX
要刪除宏:
要了解更多關於宏一般,參見:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解更多有關事件宏(工作表的代碼),請參閱:
http://www.mvps.org/dmcritchie/excel/event.htm
宏必須爲此工作啓用!
++不錯。如果你包含錯誤處理,並且顯示[Here],那就更好了(http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640) –
這聽起來像你試圖重新發明了好大的data validation上出類拔萃本身
支持例如,標識列A
,並選擇data
選項卡,data validation
然後選擇custom
和寫入=INT(A1)=A1
現在用戶將無法插入非數字字符
另一種方式。
您不必循環所有單元格。設想一個用戶複製10000行數據。整列上的.Replace
比循環遍歷每個單元快得多。您可以繼續添加到MyList = "(|)| |-"
。您想要替換的所有內容都由|
分隔。如果在未來,要在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
這是做的不正確的方式來代替
|
以及再設置一個唯一的分隔符的,你必須在開始的可能性無盡循環...你可能想看到[This](http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640) –@SiddharthRout你是對,我忘了禁用事件。固定。 – iliketocode