У меня был ограниченный успех при разработке шаблонов регулярных выражений по критериям НЕ, но у меня было лучше разумного успеха с удалением того, чего я не хочу, до фактического соответствия шаблона регулярного выражения.
Function freeNums(str As String)
Dim i As Long
Static rgx As Object
'prep a return error if no match
freeNums = CVErr(xlErrNA)
'only create the object if it has never been used before
If rgx Is Nothing Then
Set rgx = CreateObject("VBScript.RegExp")
End If
'deal with the root string first and remove what we don't want to match
'pattern for 0-9 one to nine digits in length enclosed in brackets
rgx.Pattern = "\([0-9]{1,9}\)"
'numbers in brackets removed
str = rgx.Replace(str, vbNullString)
'now look for what we actually want
'pattern for 0-9 one to nine digits in length
rgx.Pattern = "[0-9]{1,9}"
If rgx.Test(str) Then
freeNums = rgx.Execute(str).Item(0)
End If
End Function
Обратите внимание, что для сохранения начального нуля результат возвращается как текст. По умолчанию это выравнивание по умолчанию для текста. В конечном итоге было бы лучше вернуть результат как истинное число и форматировать ячейку как 00000
.