我想用國際版「447」批量替換字符串列表(手機號碼)的「07」部分。Microsoft Excel中的正則表達式子串替換
字符串列表當前在Excel電子表格中形成一個列。
我的正則表達式匹配需要修改字符串:
^07[0-9]{9}$
...但我不知道該怎麼辦,我需要更換。
數據位於Excel電子表格中,但當然可以導出。
首選的解決方案是將數據保存在Microsoft Excel中,但它當然可以導出然後重新導入。我知道TextMate具有正則表達式替換功能。這可以幫助我嗎?
我想用國際版「447」批量替換字符串列表(手機號碼)的「07」部分。Microsoft Excel中的正則表達式子串替換
字符串列表當前在Excel電子表格中形成一個列。
我的正則表達式匹配需要修改字符串:
^07[0-9]{9}$
...但我不知道該怎麼辦,我需要更換。
數據位於Excel電子表格中,但當然可以導出。
首選的解決方案是將數據保存在Microsoft Excel中,但它當然可以導出然後重新導入。我知道TextMate具有正則表達式替換功能。這可以幫助我嗎?
我即將去尋找高雅的VBA解決方案或什麼,然後我想:「等一下。我們只是想操縱我們自己的電子表格中的一些數據。爲什麼複雜的事情?「
請問這個想法的聲音給你:
只是與現有的數據列後插入新列(我們假定是列C)
填充新列這個公式:="447" & RIGHT(C1, 9)
選擇列d(其現在包含新的值)和值粘貼(這是粘貼對話框中)到列C,替換現有值
刪除「工作」列d
它不是編程,但如果你只有做一次,你並不需要一個程序,對不對?
你將不得不包括微軟正則表達式在您的工作表(將其添加爲參考)
然後進行快速宏,如下所示,使用它:
Dim reg As New RegExp
Public Function RegMatch(Source As Range, Pattern As String, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Long
Dim rng As Range, i As Long, j As Long
reg.IgnoreCase = IgnoreCase
reg.MultiLine = MultiLine
reg.Pattern = Pattern
i = 0: j = 0
For Each rng In Source
i = i + 1
If reg.test(rng.Value) Then
j = i
Exit For
End If
Next
RegMatch = j
End Function
然後,簡單地稱其爲一個宏放在片材(例如):
=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3))
其中第一個參數是您的範圍內,並且第二個參數是您的圖案(如上述)
不錯的提示,庫的全名是'Microsoft VBScript Regular Expressions 5.5` – jeb 2014-04-30 09:50:36
使用Excel VBA。引用「Microsoft VBScript Regular Expressions 5.5」。
然後做,常新VBA模塊中:
Sub ReplaceMobileNumbers
Dim re as New RegExp
re.Pattern = "^0(?=7[0-9]{9}$)" ''# look-ahead
Dim cell As Range
For Each cell In ActiveSheet.Range("Your Range Address in A1:B1 notation")
cell.Value = re.Replace(cell.value, "44")
Next cell
End Sub
並稱之爲子在立即窗口。以上是丟棄代碼,不是考慮到可重用性。我知道,所以不要告訴我。 ;-)
雖然你也許可以逃脫細胞功能:
=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1)
+1更完整實用 – 2014-06-15 11:13:21
從這個問題聽起來好像不是所有的電話號碼都需要轉換(即它們並不是全部開始與07)。只需要將上面的公式包含在IF中來處理:IF(LEFT(C1,2)=「07」,「447」&RIGHT(C1,9),C1) – barrowc 2009-06-17 01:28:47