Option Explicit
Const mcstrSearchThisString As String = "How much do those shoes cost?"
Const mcstrSearchForThis As String = "os"
Private Sub TellMeHowManyTimesAndWhere()
Dim avarStringPositions As Variant
Dim intCounter As Integer
Dim strStringPositions As String
avarStringPositions = PositionsInString(mcstrSearchThisString, _
mcstrSearchForThis)
For intCounter = LBound(avarStringPositions, 2) To _
UBound(avarStringPositions, 2)
If intCounter = 0 Then
strStringPositions = avarStringPositions(0, intCounter) _
& "-" & avarStringPositions(1, intCounter)
Else
strStringPositions = strStringPositions & ", " _
& avarStringPositions(0, intCounter) & "-" _
& avarStringPositions(1, intCounter)
End If
Next intCounter
strStringPositions = strStringPositions & "."
Debug.Print "There are a total of " & intCounter _
& " occurrence(s) of " & Chr(34) & mcstrSearchForThis & Chr(34) _
& ": " & strStringPositions
End Sub
Public Function PositionsInString(SearchThisString As String, _
SearchForThis As String) As Variant
Dim intPositionOfSoughtString As Integer
Dim intStartPosition As Integer
Dim avarStringPositions As Variant
Dim intCounter As Integer
Dim intStringLength As Integer
intStringLength = Len(SearchForThis)
ReDim avarStringPositions(0 To 1, 0 To 0)
intStartPosition = 1
Do
intPositionOfSoughtString = InStr(intStartPosition, _
SearchThisString, SearchForThis, vbTextCompare)
If intPositionOfSoughtString <> 0 Then
ReDim Preserve avarStringPositions(0 To 1, 0 To intCounter)
avarStringPositions(0, intCounter) = intPositionOfSoughtString
avarStringPositions(1, intCounter) = intPositionOfSoughtString _
+ intStringLength - 1
intStartPosition = intPositionOfSoughtString + 1
intCounter = intCounter + 1
End If
Loop Until intPositionOfSoughtString = 0
PositionsInString = avarStringPositions
End Function
|