Excel VBA复杂字符串替换

时间:2016-12-07 16:54:33

标签: excel string vba 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"

我无法在Google上搜索,因为我不知道该术语是什么。我知道我可以在VBA中使用.replace来替换子字符串,但我不知道如何使用像.replace(****** y n n ***)

这样的字符数来使用外卡

3 个答案:

答案 0 :(得分:8)

VBA:

您使用?来匹配单个通配符。

只需突出显示单元格并运行此宏。

您也可以在“查找/替换”对话框中使用它。

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

Results

答案 1 :(得分:3)

我使用了一个公式,因为你有一个非常常见的格式。如果值在A1中,则在B1中尝试:

= LEFT(A1,SEARCH(“y n n”,A1)-8)&右(A1,LEN(A1) - (SEARCH(“y n n”,A1)+8))

Excel results

当然这取决于你总是有一个非常严格的格式,有6位数后跟一个空格,后跟一个“ynn”后跟一个空格,后跟一个3个字母的单词,然后是一个空格,然后是别的!!

答案 2 :(得分:1)

像这样,与BruceWayne一致,instr是搜索,我们使用mid,两者都可用作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