在特定单词后提取文本

时间:2017-03-07 17:17:27

标签: excel-vba vba excel

我希望在"之后检索文本,因为"从字符串下面的单词。在下面的例子中,我想检索" GLDSK8716"这反映了" for"字。我尝试了以下公式,但它检索了"之后的所有文本"。我只想检索" GLDSK8716"。

这是我使用的公式:

=TRIM(MID(R2,SEARCH("For",R2)+LEN("for"),255))

字符串:

Completion Notification for GLDSK8716 -  Derivative Contracts - Futures, Forwards, Swaps, and Options

3 个答案:

答案 0 :(得分:0)

尝试=MID(A1,FIND("for ",A1)+4,FIND(" ",A1,FIND("for ",A1)+4)-(FIND("for ",A1)+4))

假设您的文字位于单元格A1中,且模式为for <data> -

答案 1 :(得分:0)

这是我的VBA版本:

Option Explicit

Public Function ExtractAfterWord(rngWord As Range, strWord As String) As String

    On Error GoTo ExtractAfterWord_Error

    Application.Volatile

    Dim lngStart        As Long
    Dim lngEnd          As Long

    lngStart = InStr(1, rngWord, strWord)
    If lngStart = 0 Then
        ExtractAfterWord = "Not Found"
        Exit Function
    End If
    lngEnd = InStr(lngStart + Len(strWord) + 1, rngWord, " ")

    If lngEnd = 0 Then lngEnd = Len(rngWord)

    ExtractAfterWord = Trim(Mid(rngWord, lngStart + Len(strWord), lngEnd - lngStart - 2))



    On Error GoTo 0
    Exit Function

ExtractAfterWord_Error:

    ExtractAfterWord = Err.Description

End Function

代码(if lngEnd = 0)中的条件是确保即使for在文本中的最后一个单词之前,该公式仍然有效。 A&#34;未找到&#34;答案也补充说。

enter image description here

答案 2 :(得分:0)

我的解决方案是在VBA中。下面的代码使用RegEx来查找空格之间的所有单词。然后,一旦找到&#34;对于&#34;它就会循环遍历所有单词。它会引发一个标志,指示下一个单词(RegEx.Match)是您要查找的单词。

<强>代码

Option Explicit

Sub ExtractNumbers()

Dim Reg1 As Object
Dim RegMatches As Variant
Dim Match As Variant
Dim NextWord As Boolean

Set Reg1 = CreateObject("VBScript.RegExp")
With Reg1
    .Global = True
    .IgnoreCase = True
    .Pattern = "\w{1,50}" ' Match any set of characters up to length of 50, untill a space
End With

Set RegMatches = Reg1.Execute(Range("R2").Value)
NextWord = False ' <-- reset flag
If RegMatches.Count >= 1 Then        
    For Each Match In RegMatches
        If NextWord Then
            MsgBox "The word you are looking for is '" & Match & "'"
            Exit Sub
        End If
        If UCase(Match) Like "FOR" Then NextWord = True '<-- "for" found >> raise flag up
    Next Match
End If

End Sub

在单元格R2中对您的字符串进行屏幕截图,并生成MsgBox

enter image description here