2013-01-02 68 views
0

我在找一個excel 2007的正則表達式,它可以替換所有-3的實例,只在字符串的末尾用絕對沒有的東西(刪除它)來替換它。在整個字符串中有-3個實例,但是我只需要在最後刪除那些字符串。這被集成到一個宏中,所以使用一個正則表達式進行查找和替換是首選。excel正則表達式行尾

回答

1

您可以通過使用VBA的Instr功能做到這一點沒有Regex。下面是代碼:

Sub ReplaceIt() 

Dim myRng As Range 
myRange = Range("A1") ' change as needed 

If InStr(Len(myRange.Text) - 2, myRange.Text, "-3") > 0 Then 

    myRange.Value = Left(myRange, Len(myRange) - 2) 

End If 


End Sub 

更新

基於以下樹裏的評論,改變If語句這也將工作,這是一個有點清潔。

If Right (MyRange, 2) = "-3" Then MyRange=Left(MyRange, Len(MyRange)-2) 
+0

快速瀏覽一下 - 一些字符串可能有-3以外的其他地方,這是否仍然有效?一旦我在這裏進入辦公室,我會試試這個! – NRGdallas

+0

@斯科特我首先想到了這個例程。但根據OP的描述,他可以在字符串的任何位置使用「-3」的倍數。 :)在你的情況下,OP可能需要遍歷你的方法,直到所有最後的'-3'消失。例如'-3thisstring-3 has many-3-3-3-3' – bonCodigo

+0

@NRGdallas - 是的,這隻會消除字符串末尾的'-3'。但@bonCodigo指出,如果最後有多個「-3」,它只會刪除第一個。不知道這是否會成爲問題。我主要提供此解決方案作爲其「全功能」VBA解決方案,無需引用其他對象。 –

1

請嘗試以下操作: -

編輯按OP的評論:

Sub mymacro() 
Dim myString as String 
//'--do stuff 
//'-- you could just do this or save the returning 
//'-- string to another string for further processing :) 
MsgBox replaceAllNeg3s(myString) 
End Sub 

Function replaceAllNeg3s(ByRef urstring As String) As String 
Dim regex As Object 
Dim strtxt As String 

    strtxt = urstring 
    Set regex = CreateObject("VBScript.RegExp") 

    With regex 
    //'-- replace all -3s at the end of the String 
    .Pattern = "[(-3)]+$" 
    .Global = True 
    If .test(strtxt) Then 
     //'-- ContainsAMatch = Left(strText,Len(strText)-2) 
     //'-- infact you can use replace 
     replaceAllNeg3s = Trim(.Replace(strText,"")) 
    Else 
     replaceAllNeg3s = strText 
    End If 
    End With 

End Function 

//'-- tested for 
//'-- e.g. thistr25ing is -3-3-3-3 
//'-- e.g. 25this-3stringis25someting-3-3 
//'-- e.g. this-3-3-3stringis25something-5 
//'-- e.g. -3this-3-3-3stringis25something-3 
+0

請嘗試了這一點,並評論。正如你所說,這個'regex'只會在字符串末尾刪除最後一個'-3'。所以你需要刪除很多然後在字符串的末尾請做評論。 – bonCodigo

+0

當我進入辦公室時,我會試一試 - 我有一個目前爲止大約200步的宏,我是否會將其全部複製並粘貼到宏中,此步驟需要使用代碼編輯? – NRGdallas

+0

@NRGdallas我已更新,以顯示你需要做什麼:)期待您的意見。 – bonCodigo

1

除非它是更大宏的一部分,否則這裏不需要VBA!只需使用這個公式,你會得到結果:

 
=IF(RIGHT(A1,2)="-3",LEFT(A1,LEN(A1)-2),A1) 

(假設你的文字是細胞A1