2016-12-07 139 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个字母的单词,然后是一个空间,然后是别的东西!