【问题标题】:Excel VBA Complex String ReplaceExcel VBA 复杂字符串替换
【发布时间】:2016-12-08 01:09:13
【问题描述】:

有没有办法在一个字符串中找到一个子字符串,然后替换该子字符串和它前后的多个字符?

例如,我有这些:

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 ***)

【问题讨论】:

  • 您需要 VBA 吗?我认为你可以做到这一点,使用 Mid()Search()。编辑:这是一种快速,可能太简单的方式:=LEFT(A1,SEARCH(" ",A1))&RIGHT(A1,4)。如果您在 VBA 中需要它,只需将其“翻译”为 VBA。这假设您的最后一个单词始终是 4 个字母...如果更多,您可以调整。
  • 我更喜欢 VBA 而不是工作表,因为从长远来看,我的工作量较少,但无论您是手动还是编程,我还想问您是否宁愿使用 Left() 和 Mid()或 Find() (如果手动搜索())
  • 谢谢各位,我知道 Left() 和 Mid(),但我正在寻找一种方法来尽可能减少和更简单的编码。 Left() 和 Mid() 是我的第一个选择,但后来我记得以前看到过这样的解决方案,我只是不记得该解决方案的术语或名称。:) 由于其他原因,我需要通过 VBA 找到解决方案。

标签: string vba excel


【解决方案1】:

VBA:

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

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

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

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

【讨论】:

  • 这太棒了,我从来不知道你能做到这一点。 (另外,拖到视图中的确认让我笑了)。
  • 就是这样! :D 太棒了! Sheet1.Range("B1").Value = Sheet1.Range("A1").Replace("?????? y n n ??? ", " ", xlPart, xlByRows, False)。它更简单,更容易编码。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    类似这样的东西,与 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2016-01-04
      • 1970-01-01
      • 2017-05-27
      相关资源
      最近更新 更多