I'm working with a pair of scripts I found online and they almost work for my purposes but not quite. In the content I'm using it, I have a long string comprised of numbers and letters - accounting codes and accounts to be precise. The script that takes the letters does so admirably, but some of the account names have numbers in them so they are dropped. The other script that takes the numbers also removes any spaces between the numbers that are needed later.

So, for instance a column that contains something like:

'10 5200 302 2077 9999 211 3 TR 401 ABC DEF GHI'

with chars getChars script, I get 'TR ABC DEF GHI' - missing the 401

and the getNums script returns 105200302207799992113 - missing the spaces.

I've modified the numeric script to include spaces but then it pulls any number from anywhere and I'm only interested in the first portion of the string. So, while I get the correct 10 5200 302 2077 9999 211 3 , I also get the 401 from the account name.

I was hoping to keep this in functions so it will be easy for our finance team to run it themselves - too complicated and it will land on my desk every time it needs to be split - which I'd like to avoid.

While the test data and the sample file have 3 spaces between the numbers and letters, there's not guarantee that will continue in the future. The only thing I can think of for the numbers is to find the first letter in the string and somehow crawl backwards, find the last number and then get everything from the beginning to that point - but I'm sure there must be a better way.

My current iteration of the scripts are:

Sample data could be:

Any help would be greatly appreciated and, as always, many thanks in advance.

So, for instance a column that contains something like:

'10 5200 302 2077 9999 211 3 TR 401 ABC DEF GHI'

with chars getChars script, I get 'TR ABC DEF GHI' - missing the 401

and the getNums script returns 105200302207799992113 - missing the spaces.

I've modified the numeric script to include spaces but then it pulls any number from anywhere and I'm only interested in the first portion of the string. So, while I get the correct 10 5200 302 2077 9999 211 3 , I also get the 401 from the account name.

I was hoping to keep this in functions so it will be easy for our finance team to run it themselves - too complicated and it will land on my desk every time it needs to be split - which I'd like to avoid.

While the test data and the sample file have 3 spaces between the numbers and letters, there's not guarantee that will continue in the future. The only thing I can think of for the numbers is to find the first letter in the string and somehow crawl backwards, find the last number and then get everything from the beginning to that point - but I'm sure there must be a better way.

My current iteration of the scripts are:

```
Function GetChars(target As Range)
Dim MyStr As String, i As Integer
MyStr = ""
If Len(target.Value) = 0 Then GoTo GoExit
For i = 1 To Len(target.Value)
If Not IsNumeric(Mid(target, i, 1)) Then MyStr = MyStr & Mid(target, i, 1)
Next i
GoExit:
GetChars = Trim(MyStr)
End Function
Function GetNums(target As Range)
Dim MyStr As String, i As Integer
MyStr = ""
If Len(target.Value) = 0 Then GoTo GoExit
For i = 1 To Len(target.Value)
If IsNumeric(Mid(target, i, 1)) Or Asc(Mid(target, i, 1)) = 32 Then MyStr = MyStr & Mid(target, i, 1)
Next i
GoExit:
GetNums = MyStr
End Function
```

Sample data could be:

```
10 1098 AD AAA BBB Retreat BP
10 1220 AD Abc Def JAF
10 1230 AD Abc Def SSSC
10 5200 360 1647 9999 100 3 AD 401 Xyz Abc Def JAF
10 5200 360 1731 9999 120 3 AD 301 Ghi Jkl Mno ETRC
10 5200 360 1732 9999 180 3 AD 302 Pqr Stu Vwxyz CASC
10 5200 360 1732 9999 211 3 AD 302 Abc Def Hijkl BP
10 8910 304 4002 9999 110 3 FA CP GED Dallas
10 8910 350 1499 9999 100 3 FA ABCD MBR JAF
```

Any help would be greatly appreciated and, as always, many thanks in advance.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.

Open in new window

Ron