Из текста вычленить последнее значение в скобках с учетом условия

Необходимо сформировать столбец значений для таблицы по исходным значениям другого столбца той же таблицы, содержащего в каждой ячейке значение вида:

1(ADCD);2(EFG);3(HJKLN)

Как мы видим, элементы разделены точкой с запятой ";". Требуется вычленить последний элемент 3(HJKLN) и его значение в скобках HJKLN использовать в ячейке нового столбца. При этом, если последний элемент имеет вид 5(CGHL), то есть за скобками стоит 5, то этот элемент пропускается и берётся предпоследний. Все элементы с пятёрками пропускаются:

Пример

Как это сделать в средствами Excel?


Ответы (2 шт):

Автор решения: Akina
Function get_last_not_5(source As Range)
get_last_not_5 = ""
If source.Cells.Count > 1 Then
    Exit Function
End If
Dim tmp() As String
tmp = Split(source.Value, ";")
Dim i As Integer
For i = UBound(tmp) To LBound(tmp) Step -1
    If Left(tmp(i), 1) <> "5" Then
        get_last_not_5 = tmp(i)
        Exit Function
    End If
Next
End Function

введите сюда описание изображения

→ Ссылка
Автор решения: vikttur

1- Нужное значение можно извлечь формулой листа:

=СЖПРОБЕЛЫ(ПРАВБ(ПОДСТАВИТЬ(ЛЕВБ("kk"&A2;ПОИСК(5;A2&"kk5")-1);"(";ПОВТОР(" ";9));9))

2- Вариант UDF:

Function fExtractVal(sStr As String) As String
    Dim j As Long, sTemp As String
    
    sTemp = Split(";" & sStr, ";5")(0)
    j = InStrRev(sTemp, "(") + 1
    
    fExtractVal = Replace(Mid$(sTemp, j), ")", "")
End Function

В ячейку:

=fExtractVal(A2)
→ Ссылка