Here's something that will handle things whether there's spaces or not, and
any amount of number characters between the text.
Sub ParseMixedString()
' Parses a string containing numbers between alpha characters
' Requires FilterNumber() and FilterString() functions
Dim sText As String, sNumText As String, sText1 As String, sText2 As String
Dim iPos As Integer
sText = ActiveCell.Value ' Range("A1").Value
sNumText = FilterNumber(sText, False)
iPos = InStr(1, sText, sNumText, vbTextCompare) - 1
sText1 = Left$(sText, iPos)
sText2 = Mid$(sText, Len(sText1) + Len(sNumText) + 1)
With ActiveCell 'Range("A1")
.Offset(, 1).Value = Trim(sText1)
.Offset(, 2).Value = sNumText
.Offset(, 3).Value = Trim(sText2)
End With
End Sub
Function FilterNumber(Text As String, TrimZeros As Boolean) As String
' Filters out formatting characters in a number and trims any trailing
decimal zeros
' Requires the FilterString function
' Arguments: Text The string being filtered
' TrimZeros True to remove trailing decimal zeros
' Returns: String containing valid numeric characters.
Const sSource As String = "FilterNumber()"
Dim decSep As String, i As Long, sResult As String
' Retreive the decimal separator symbol
decSep = Format$(0.1, ".")
' Filter out formatting characters
sResult = FilterString(Text, decSep & "-0123456789")
' If there's a decimal part, trim any trailing decimal zeros
If TrimZeros And InStr(Text, decSep) > 0 Then
For i = Len(sResult) To 1 Step -1
Select Case Mid$(sResult, i, 1)
Case decSep
sResult = Left$(sResult, i - 1)
Exit For
Case "0"
sResult = Left$(sResult, i - 1)
Case Else
Exit For
End Select
Next
End If
FilterNumber = sResult
End Function
Function FilterString(Text As String, ValidChars As String) As String
' Filters out all unwanted characters in a string.
' Arguments: Text The string being filtered
' validChars The characters to keep
' Returns: String containing only the valid characters.
Const sSource As String = "FilterString()"
Dim i As Long, sResult As String
For i = 1 To Len(Text)
If InStr(ValidChars, Mid$(Text, i, 1)) Then sResult = sResult &
Mid$(Text, i, 1)
Next
FilterString = sResult
End Function
Enjoy,
Garry