Страницы: 1
RSS
из текста разделенного на произвольное количество частей получить фрагмент из последней части
 
Уважаемые эксперты!

Есть вот такие строчки. каждая располагется в одной ячейке
StudyCharacteristics[V03]\ClinicalStudy[V03.175]\ObservationalStudy,Veterinary[V03.175.750]
StudyCharacteristics[V03]\ComparativeStudy[V03.250]
StudyCharacteristics[V03]\ConsensusDevelopmentConference[V03.300]\ConsensusDevelopmentConference,NIH[V03.300.300]
StudyCharacteristics[V03]\EvaluationStudy[V03.400]

Задача:

забрать последнее значение, например, ObservationalStudy,Veterinary[V03.175.750]
но нужно избавить это текст от этого [V03.175.750]
и поместить оставшееся это в ObservationalStudy,Veterinary
отдельную ячеку требуемого столбца.

С помощью чего это реализуется?
Формула?
Макрос?

Помогите решить задачу. Строк более 150 000...
Изменено: Юрий М - 16.04.2022 00:21:12
 
название темы:
из текста разделенного на произвольное количество частей получить фрагмент из последней части

см.вложение
Код
=ЛЕВБ(Посл;ПОИСК("[";Посл)-1)
Изменено: Ігор Гончаренко - 15.04.2022 23:50:32
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
jenya82 написал:
Какой формулой можно решить задачу
КАКУЮ задачу? Что можно понять из придуманного Вами названия?
 
Ну как-то так (нужен как минимум офис 2013):
Код
=LEFT(FILTERXML("<t><s>"&SUBSTITUTE(A1;"]\";"</s><s>")&"</s></t>";"//s[last()]");SEARCH("[";FILTERXML("<t><s>"&SUBSTITUTE(A1;"]\";"</s><s>")&"</s></t>";"//s[last()]"))-1)

Ну а название темы пусть автор придумывает)
Изменено: memo - 15.04.2022 23:44:37
 
всем спасибо!
 
Среднее по длине, но быстрее чем конкуренты.
=TRIM(LEFT(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(C1;"";REPT(" ";LEN(C1)));LEN(C1)));"[";REPT(" ";LEN(C1)));LEN(C1)))
Изменено: БМВ - 16.04.2022 08:52:51
По вопросам из тем форума, личку не читаю.
 
вариант пользовательской функцией:
Код
Function RegexExecute(str As String)
Dim newStr As String
    newStr = StrReverse(str)
    With CreateObject("VBScript.Regexp")
        .Global = False
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = "(?:\[).+?(?=\\)"
        RegexExecute = StrReverse(Right(.Execute(newStr)(0), Len(.Execute(newStr)(0)) - 1))
    End With
End Function
 
UDF
Код
Function iPart(cell$)
Dim mo As Object
 With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "[^\\]+"
   If .test(cell) Then
     Set mo = .Execute(cell)
     iPart = mo(mo.Count - 1)
     .Pattern = "\[.+\]"
     iPart = .Replace(iPart, "")
   Else
     iPart = ""
   End If
 End With
End Function
 
Код
Function LastBloc$(s$)
  Dim re, m
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = "\\([^[]+)"
  If re.test(s) Then _
    re.Global = True: Set m = re.Execute(s): LastBloc = m(m.Count - 1).submatches(0)
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх