Если VBA и UDF в порядке, тогда я советую вам использовать регулярные выражения.
Откройте редактор VBA (ALT + F11) и добавьте модуль.
Вставьте следующий код и сохраните книгу Excel как макроактивированную книгу (xlsm).
Function Regex(Cell)
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = ".*(current and \(\d+\))"
' or if you want to match optional ()
'RE.Pattern = ".*(current and \(?\d+\)?)"
RE.Global = True
RE.IgnoreCase = True
Set Matches = RE.Execute(Cell)
If Matches.Count <> 0 Then
Regex = Matches.Item(0).submatches.Item(0)
End If
End Function
Используйте его как формулу, например:
=Regex(A1)
Он вернет искомую часть current and [number]
Конечно, возврат кода может быть любым, что вы захотите.
НоЯ не понимаю логику в вашем вопросе, поэтому я возвращаю то, что ищет
Теперь я вижу логику.
Это вернетсявывод, как вы ожидаете.
Function Regex(Cell)
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = ".*current and \((\d+)\)"
' or if you want to match optional ()
'RE.Pattern = ".*current and \(?(\d+)\)?"
RE.Global = True
RE.IgnoreCase = True
Set Matches = RE.Execute(Cell)
If Matches.Count <> 0 Then
Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
Else
Regex = "False"
End If
End Function
Он умножает захваченное число на 5, чтобы получить количество минут.
Если ничего не найдено, возвращается False
.
VBAи регулярное выражение обычно означает, что код на листе легче поддерживать и легче отлаживать.
Чтобы заставить его реагировать на строку с current
и (number)
, используйте этот код:
Function Regex(Cell)
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = ".*current.*?\((\d+)\)"
RE.Global = True
RE.IgnoreCase = True
Set Matches = RE.Execute(Cell)
If Matches.Count <> 0 Then
Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
Else
Regex = "False"
End If
End Function
Этот код будет выглядетьдля [anything]
current
[anything]
([number])