Excel VBA复杂字符串替换

3

有没有一种方法可以在字符串中找到一个子字符串,然后替换该子字符串以及它之前和之后的若干个字符?

例如,我有以下内容:

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
我更喜欢使用VBA而不是工作表,因为从长远来看,我需要做的工作更少。但无论您是手动还是编程方式,我也想问一下您是否更愿意使用Left()和Mid()或Find()(如果是手动,则使用Search())。 - Bernd Stoeckel
谢谢大家,我知道Left()和Mid()函数,但我正在寻找一种尽可能简单的方法来实现这个功能。Left()和Mid()是我的第一选择,但我记得以前看到过一种类似的解决方案,只是我不记得那个解决方案的术语或名称了。:) 我需要通过VBA找到一个解决方案,出于其他原因。 - jay
3个回答

10

VBA:

使用?匹配单个通配符。

只需突出显示单元格,然后运行此宏即可。

您还可以在查找/替换对话框中使用此功能。

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

结果


1
太棒了,我从来不知道你可以这样做。 (而且,拖入视图的确认让我发笑)。 - BruceWayne
1
就是这样!:D 太棒了!Sheet1.Range("B1").Value = Sheet1.Range("A1").Replace("?????? y n n ??? ", " ", xlPart, xlByRows, False)。它更简单易于编码。 - jay

3

我使用了一个公式,因为你有一个相当普遍的格式。如果值在A1中,在B1尝试:

=LEFT(A1,SEARCH("y n n",A1)-8) & RIGHT(A1,LEN(A1)-(SEARCH("y n n",A1)+8))

Excel results

当然,这取决于您始终具有严格的格式,其中包括6位数字,后跟一个空格,后跟一个“y n n”,后跟一个空格,后跟一个3个字母的单词,后跟其他内容!


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接