2016-12-07 175 views
3

有沒有辦法在字符串中找到子字符串,然後在它之前和之後替換該子字符串和一些字符?Excel VBA複雜字符串替換

例如,我有這些:

Mandatory659852 y n n TRY RACE 
Mechanica888654 y n n FRY SAME 
GILLETE685254 y n n CRY FACE 

我可以編程VBA刪除子串" y n n "包括任何6個字符的子字符串的左邊和任何3個字符到它的右邊?所以結果應該是:

"Mandatory RACE" 
"Mechanica SAME" 
"GILLETE FACE" 

我堅持不下去了谷歌搜索,因爲我不知道該術語是什麼。我知道我可以在VBA中使用.replace來替換子字符串,但我不知道如何使用通配符的數字如.replace(****** y n n ***)

+1

你需要VBA嗎?我*想*你可以這樣做,用一些'Mid()'和'Search()'的用法。編輯:這裏有一個快速,可能太簡單的方法:'= LEFT(A1,SEARCH(「」,A1))&RIGHT(A1,4)'。如果你在VBA中需要它,只需將它「翻譯」到VBA即可。這假設你的最後一個單詞總是4個字母......如果它更多,你可以調整。 – BruceWayne

+0

我更喜歡VBA工作表,因爲從長遠來看,我的工作量較少,但是無論您是手動還是編程,我還想問您是不是寧願使用Left()和Mid()或Find()(Search( )如果手動) –

+0

感謝球員,我知道左()和中(),但我正在尋找一種方法來儘可能少和更簡單的編碼。 Left()和Mid()是我的第一選擇,但我記得之前看到過這樣的解決方案,我只記得解決方案的術語或名稱。:)我需要通過VBA找到一個解決方案,其他原因。 – jay

回答

8

VBA:

您使用?匹配單個通配符。

只需突出顯示單元格並運行此宏。

您也可以在查找/替換對話框中使用它。

Sub FixIt() 
Selection.Replace "?????? y n n ???", "", xlPart 
End Sub 

Results

+1

這真棒,我從來不知道你可以做到這一點。 (另外,拖到視圖中的確認讓我笑了)。 – BruceWayne

+1

它在那裏! :D真棒! 'Sheet1.Range(「B1」)。Value = Sheet1.Range(「A1」)。Replace(「?????? y n n ???」,「」,xlPart,xlByRows,False)'。編碼更簡單,更容易。 – jay

1

這樣的事情,符合布魯斯韋恩,instr是搜索,再次,使用中間,既可以作爲WS功能

Dim sINPUT As String 
    Dim sOUTPUT As String 

    sINPUT = "Mandatory659852 y n n TRY RACE" 

    sOUTPUT = Mid(sINPUT, 1, (InStr(1, sINPUT, " y n n") - 6) - 1) 
    sOUTPUT = sOUTPUT & Mid(sINPUT, 3 + (InStr(1, sINPUT, "y n n") + 1 + Len("y n n")))   
    Debug.Print sOUTPUT 
3

我使用的公式,你有一個相當普遍的格式。如果值爲A1,則在B1中嘗試:

= LEFT(A1,SEARCH(「ynn」,A1)-8)& RIGHT(A1,LEN(A1) - (SEARCH(「ynn」,A1 )+8))

Excel results

當然,這取決於你總是和6位數字後面加一個空格後面緊跟着一個空間「YNN」一個非常嚴格的格式,然後是3個字母的單詞,然後是一個空間,然後是別的東西!