Похоже, что это работает на всех ваших примерах:
Регулярное выражение разделяет переход от числа к букве и наоборот, а также делает исключение для TH
и .
Эти исключения могут привести к проблемам в других данных, но, похоже, работают для того, что вы представляете. Является ли ваша изменчивость такой, что это будет проблемой, неизвестно.
Обратите внимание, что я использовал раннее связывание для Regex (инструменты / ссылки, включающие регулярные выражения Microsoft VBScript 5.5), но вы можете изменить это на поздняя привязка, если вы будете распространять этот код.
Редактировать: Обратите внимание, что я НЕ преобразовал это в надлежащий регистр, но это можно было бы сделать, если действительно требуется
`Set Reference to Microsoft VBScript Regular Expressions 5.5
Option Explicit
Function replacer(s As String) As String
Dim RE As RegExp
Const sPat As String = "(\dTH|\d)(?!TH)(?=[A-Z])|([A-Z.])(?=\d)"
Const sRepl As String = "$1$2 "
Dim sTemp As String
Set RE = New RegExp
With RE
.Global = True
.Pattern = sPat
.IgnoreCase = True
replacer = .Replace(s, sRepl)
End With
End Function
Формула будет, например:
A2: =replacer(A2)
Если требуется регистр PROPER
, измените формулу на:
A2: =PROPER(replacer(A2))
this Здесь, в США, похоже, лучше работает с вашими данными, чем с функцией VBA StrConv
.
![enter image description here](https://i.stack.imgur.com/4XqxR.png)