Скорее всего, вам понадобится UDF вместо встроенной функции.Это должно работать, но, вероятно, нуждается в настройке.Ваш пример в вашем OP возвращает 345678
как правильное возвращение, но с обеих сторон нет букв.Поэтому я предполагаю, что вы хотите: либо 6 последовательных чисел сами по себе , либо 6 последовательных чисел с буквой на обеих сторонах.
Добавьте это в модуль рабочей книги, и вы сможете звонить как=return_numbers(A1)
.Вы можете или не можете добавить ссылку RegEx в VBEditor.
Function return_numbers(ByVal cel As Range) As String
Dim strPattern As String
Dim regEx As New RegExp
strPattern = "[a-z]\d{6}[a-z]"
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = strPattern
End With
Dim matches As Object
Set matches = regEx.Execute(cel)
If Len(cel) = 6 And IsNumeric(cel) Then
return_numbers = cel.Value
Set regEx = Nothing
Exit Function
End If
If matches.Count <> 0 Then
return_numbers = Mid(matches.Item(0), 2, Len(matches.Item(0)) - 2)
ElseIf matches.Count = 0 Then
strPattern = "[a-z]{1}\d{6}$"
regEx.Pattern = strPattern
Set matches = regEx.Execute(cel)
If matches.Count <> 0 Then
return_numbers = Mid(matches.Item(0), 2, Len(matches.Item(0)) - 1)
ElseIf matches.Count = 0 Then
strPattern = "^\d{6}[a-z]{1}"
regEx.Pattern = strPattern
Set matches = regEx.Execute(cel)
If matches.Count <> 0 Then
return_numbers = Mid(matches.Item(0), 1, Len(matches.Item(0)) - 1)
End If
End If
End If
Set regEx = Nothing
End Function

Если вы 'желая ускорить это, я думаю, что если вы переключите операторы If/else
, он может работать немного быстрее, поскольку он не будет всегда запускать регулярное выражение, если он найдет 6 одиночных цифр
Редактировать: Это довольно неуклюже.Я уверен, что есть лучший шаблон регулярных выражений, поэтому, пожалуйста, дайте мне знать.