Страницы: 1
RSS
Извлечь из текста числовые значения, размещенные в скобках + извлечь часть текста после скобок. Перед скобками находится ключевое слово
 
Уважаемые форумчани, добрый день.
Прошу помощи.
В ячейке находится большой объем текста в т.ч. возможно наличие нескольких скобок, из которых вытаскивать значение не нужно.
Есть два типа ключевых слов, перед скобками, где нужно вытащить цифровое значение+ есть часть текста после закрытия скобок, которую нужно разместить в отдельном столбце. Ключевые слова могут  встречаться в одной ячейки.

Ключевые слова:
Зачисление (10000) RUB
Cписано (3 000) EUR

Нужно вытащить значение в скобках и валюту после скобок в отдельные столбцы "Зачисление" (тип ячейки-число) "Валюта Зачисления" (тип ячейки-текст) "Списано" "Валюта списания". Если значение не найдено, соответственно в ячейках должен быть"0(для числа)" или "пусто(для текста)"
Пример xls прикладываю
 
Код
Function GetSum(s, p)
  Dim f(1 To 1, 1 To 2), m, re
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = p
  f(1, 2) = "": GetSum = f
  If Not re.test(s) Then Exit Function
  re.Pattern = p & " \(([0-9 ]+)\) ([A-Z]+)"
  If Not re.test(s) Then Exit Function
  Set m = re.Execute(s)(0)
  f(1, 1) = Replace(m.submatches(0), " ", ""):
  f(1, 2) = m.submatches(1): GetSum = f
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Юрий Г., в PQ (в столбец Данные внести все данные и нажать Обновить все на вкладке Данные):
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "result" ]}[Content][[Данные]],
  add1 = Table.AddColumn (
    src,
    "Зачисление",
    each Number.From ( Text.BeforeDelimiter ( Text.AfterDelimiter ( [Данные], "Зачисление (" ), ")" ) ),
    type number
  ),
  add2 = Table.AddColumn (
    add1,
    "Валюта зачисления",
    each Text.Start ( Text.AfterDelimiter ( Text.AfterDelimiter ( [Данные], "Зачисление (" ), ") " ), 3 ),
    type text
  ),
  add3 = Table.AddColumn (
    add2,
    "Списано",
    each Number.From ( Text.BeforeDelimiter ( Text.AfterDelimiter ( [Данные], "Списано (" ), ")" ) ),
    type number
  ),
  add4 = Table.AddColumn (
    add3,
    "Валюта списания",
    each Text.Start ( Text.AfterDelimiter ( Text.AfterDelimiter ( [Данные], "Списано (" ), ") " ), 3 ),
    type text
  ),
  replaceNulls = Table.ReplaceValue ( add4, null, 0, Replacer.ReplaceValue, { "Зачисление", "Списано" } )
in
  replaceNulls
 
Цитата
написал:
Юрий Г., в PQ (в столбец Данные внести все данные и нажать Обновить все на вкладке Данные):
surkenny,  Круто. спасибо большое. совсем немного знаком с PQ, но суть понятна, разберусь где код прописывать.  
Изменено: Юрий Г. - 15.05.2022 21:01:06
 
Цитата
написал:
@Ігор  Гончаренко Спасибо! тут знаний не хватает =( в какую сторону копать, чтобы понять куда код прописывать? =)  
Изменено: Юрий Г. - 15.05.2022 21:02:52
 
Цитата
написал:
Ігор Гончаренко, Подскажите, пожалуйста, а что именно загуглить, чтобы понять где и как прописывать такого рода функции?
спасибо!
Изменено: Юрий Г. - 15.05.2022 21:00:15
 
Цитата
Юрий Г. написал:
разберусь где код прописывать.  
На вкладке Данные - Получить данные - Запустить редактор запросов
Или Данные - Запросы и подключения - на любом запросе, появившемся справа, ПКМ - Изменить.
Перемудрил с числовым значением. А вот после валюты бывает не только пробел, а и перенос строки, и скобка.
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "result" ]}[Content][[Данные]],
  add1 = Table.AddColumn (
    src,
    "Зачисление",
    each Number.From ( Text.BetweenDelimiters ( [Данные], "Зачисление (", ")" ) ),
    type number
  ),
  add2 = Table.AddColumn (
    add1,
    "Валюта зачисления",
    each Text.Start ( Text.AfterDelimiter ( Text.AfterDelimiter ( [Данные], "Зачисление (" ), ") " ), 3 ),
    type text
  ),
  add3 = Table.AddColumn (
    add2,
    "Списано",
    each Number.From ( Text.BetweenDelimiters ( [Данные], "Списано (", ")" ) ),
    type number
  ),
  add4 = Table.AddColumn (
    add3,
    "Валюта списания",
    each Text.Start ( Text.AfterDelimiter ( Text.AfterDelimiter ( [Данные], "Списано (" ), ") " ), 3 ),
    type text
  ),
  replaceNulls = Table.ReplaceValue ( add4, null, 0, Replacer.ReplaceValue, { "Зачисление", "Списано" } )
in
  replaceNulls
Изменено: surkenny - 15.05.2022 15:29:52
 
=IFERROR(--TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(MID($A3;FIND(F$2&" (";$A3)+LEN(F$2)+2;99);CHAR(10);));")";REPT(" ";99));15));"")
и
=IFERROR(LEFT(TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE(MID($A3;FIND(F$2&" (";$A3)+LEN(F$2)+2;99);CHAR(10);));")";REPT(" ";99));99;99));3);"")
По вопросам из тем форума, личку не читаю.
Страницы: 1
Читают тему (гостей: 1)
Наверх