Страницы: 1
RSS
Power Query. Извлечение из комметариев назваие контрагента
 
Всем добрый день!
Проблема в следующем: есть колонка с комментариями, откуда нужно извлечь только название контрагента. Но ведется этот учет в в Экселе вручную и каких-то четко заданных правил внесения нет: может коммент содержать "ООО" (или ТОВ - укр), а может и нет, может быть с цифрами - суммами, датами, а может и нет, могут вообще цифры в скобках быть. Самый частый случай комментария: "ООО Ромашка 380 000 25.06.2020". Цифры и даты могут быть любые и в любом порядке. Так вот,  интересует, как выдернуть только эту "Ромашку". Логику вижу так - взять то, что после ООО и перед цифровым символом.
Пробовал примерно так:
Код
= Table.AddColumn(КонтрагентOutput, "контрагент", 
   each if Text.Contains([#"коментарі "],"ТОВ") then Text.BetweenDelimiters([#"коментарі "],"ТОВ","0")
   else if Text.Contains([#"коментарі "],"ТОВ") then Text.BetweenDelimiters([#"коментарі "],"ТОВ","1")
        ...
   else if Text.Contains([#"коментарі "],"ТОВ") then Text.BetweenDelimiters([#"коментарі "],"ТОВ","9")
   else Text.BetweenDelimiters([#"коментарі "],"ТОВ","(")
   ) 

но проблема в том, что цифры после названия в любом порядке могуть быть и код отрабатывает не совсем корректно, пример выше он отработает как "Ромашка 38", потому что уберет в первую очередь символ ноля. Порядок кода (9-0) значения не имеет, понятно.

Возможно есть какое-то решение? Спасибо!

 
Добре время суток
Цитата
Vld13 написал:
Возможно есть какое-то решение?
Да, конечно
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
 
Цитата
Возможно есть какое-то решение?
У кого нет PQ
UDF
Код
Function iOOO(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "(ООО|ТОВ)\s([А-ЯЁ]+)(?=\s\d)"
     iOOO = .Execute(cell)(0).SubMatches(1)
 End With
End Function
 
Андрей VG, прикрепил пример.
Kuzmich,  спасибо, сохранил себе код. Но сейчас интересует именно решение в Power Query.
 
Доброе время суток.
Вариант для допиливания
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Data2"]}[Content],
    startSplit = Splitter.SplitTextByAnyDelimiter({"ТОВ", "СК", "СПД"}),
    endSplit = Splitter.SplitTextByCharacterTransition({" "}, {"(", "0".."9"}),
    selectFromTOB = Table.AddColumn(Source, "Any", each try endSplit(startSplit([#"коментарі "]){1}){0}? otherwise "UNKNOWN!!!")
in
    selectFromTOB
 
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Data2"]}[Content],
    #"Trimmed Text" = Table.TransformColumns(Source,{{"коментарі ", Text.Trim, type text}}),
    #"Cleaned Text" = Table.TransformColumns(#"Trimmed Text",{{"коментарі ", Text.Clean, type text}}),
    #"Duplicated Column" = Table.DuplicateColumn(#"Cleaned Text", "коментарі ", "Копия коментарі "),
    #"Split Column by Character Transition" = Table.SplitColumn(#"Duplicated Column", "Копия коментарі ", Splitter.SplitTextByCharacterTransition({" ","("}, {"0".."9"}&{"("}), {"Контрагент"}),
    #"Trimmed Text1" = Table.TransformColumns(#"Split Column by Character Transition",{{"Контрагент", Text.Trim, type text}})
in
    #"Trimmed Text1"

Изменено: Максим Зеленский - 25.06.2020 13:24:53 (перемудрил с кодом)
F1 творит чудеса
 
Андрей VG, спасибо!
Максим Зеленский, очень эффектное решение, спасибо!
 
Максим Зеленский, по БТ было
Цитата
Vld13 написал:
как выдернуть только эту "Ромашку".
:)
 
Андрей VG, ну не проблема допилить в плане обрезания префиксов ТОВ/ООО/АТ/СК/СПД и чего еще душа пожелает :)
F1 творит чудеса
Страницы: 1
Наверх