'''
''' This function will return the Nth word in a string
'''
''' Example: If AnyString = "This is a Test // - give [me] the ***eighth*** word"
''' then ExtractWord(AnyString, " []-//*", 8) will return the string "eighth"
'''
Function ExtractWord(ByVal AnyString As String, ByVal WordDelimiters As String, ByVal WordNumber As Long) As String
Dim SA() As String
Dim ResultWord As String, Delimiter As String, MultiDelims As String
Dim SLen As Long, I As Long, DCnt As Long, SPos As Long
'reduce multiple word delimiters to a single delimiter
SLen = Len(WordDelimiters)
If SLen > 1 Then
Delimiter = Left(WordDelimiters, 1)
For I = 1 To SLen
AnyString = VBA.Replace(AnyString, Mid(WordDelimiters, I, 1), Delimiter)
Next I
WordDelimiters = Delimiter
End If
'Collapse multiple sequential delimiters to a single delimiter
For DCnt = 20 To 2 Step -2
MultiDelims = String(DCnt, WordDelimiters)
SPos = InStr(AnyString, MultiDelims)
If SPos > 0 Then
AnyString = Replace(AnyString, MultiDelims, WordDelimiters)
End If
Next
If Right(AnyString, 1) = WordDelimiters Then
AnyString = Left(AnyString, Len(AnyString) - 1)
End If
If Left(AnyString, 1) = WordDelimiters Then
AnyString = Mid(AnyString, 2, Len(AnyString) - 1)
End If
'extract desired word
SA = Split(AnyString, WordDelimiters)
If WordNumber > 0 And WordNumber <= UBound(SA) + 1 Then
ResultWord = SA(WordNumber - 1)
Else
ResultWord = "N/A" 'vbNullString
End If
ExtractWord = ResultWord
End Function