Нужна помощь в написании формулы. Суть задачи такова. Имеется ячейка с данными: Договор РСН-0098/15 расценка по аналогу с кодом 1147172 Швеллер №12П С345-3 Необходимо данные этой ячейки разбить на 3 части, чтоб получилось 1. РСН-0098/15 (идет всегда после слова ДОГОВОР) 2. 1147172 (Чаще всего семизначный, незнаю как ещё можно классифицировать) 3. Швеллер №12П С345-3 (Идет после п. 2 и до конца строки)
Пример в приложении.
Строк много, вручную делать жесть
Доброго времени суток уважаемы форумчане!
Нужна помощь в написании формулы. Суть задачи такова. Имеется ячейка с данными: Договор РСН-0098/15 расценка по аналогу с кодом 1147172 Швеллер №12П С345-3 Необходимо данные этой ячейки разбить на 3 части, чтоб получилось 1. РСН-0098/15 (идет всегда после слова ДОГОВОР) 2. 1147172 (Чаще всего семизначный, незнаю как ещё можно классифицировать) 3. Швеллер №12П С345-3 (Идет после п. 2 и до конца строки)
2 Sony Думаю, что никто не забывал, но есть нюансы.
Преимущество формульного подхода - при добавлении новых ячеек выделение ключевых полей происходит автоматически. Кроме того, формулы гипотетически обрабатывают вариант, в котором "расценка по аналогу" может быть изменена, например, на "расценка стандартная по аналогу" и т.д.
2 Sony Думаю, что никто не забывал, но есть нюансы.
Преимущество формульного подхода - при добавлении новых ячеек выделение ключевых полей происходит автоматически. Кроме того, формулы гипотетически обрабатывают вариант, в котором "расценка по аналогу" может быть изменена, например, на "расценка стандартная по аналогу" и т.д.abtextime
А я, как обычно UDF на регулярке предложу. Мне кажется, для Вашего случаю она должна дать универсальное решение. Как вариант, на ее основе можно сделать макрос, который будет разносить данные [vba]
Код
Option Explicit Function tt(Text As String, Idx As Integer) As String If Idx < 1 Then Exit Function Dim Obj As Object With CreateObject("VBScript.Regexp") .IgnoreCase = True .Pattern = "Договор +([А-ЯЁ]+-\d+/\d+).+кодом +(\d+) +(.+)" Set Obj = .Execute(Text) If Obj.Count = 0 Then Exit Function If Obj(0).Submatches.Count < Idx Then Exit Function tt = Obj(0).Submatches.Item(Idx - 1) End With End Function
[/vba]
А я, как обычно UDF на регулярке предложу. Мне кажется, для Вашего случаю она должна дать универсальное решение. Как вариант, на ее основе можно сделать макрос, который будет разносить данные [vba]
Код
Option Explicit Function tt(Text As String, Idx As Integer) As String If Idx < 1 Then Exit Function Dim Obj As Object With CreateObject("VBScript.Regexp") .IgnoreCase = True .Pattern = "Договор +([А-ЯЁ]+-\d+/\d+).+кодом +(\d+) +(.+)" Set Obj = .Execute(Text) If Obj.Count = 0 Then Exit Function If Obj(0).Submatches.Count < Idx Then Exit Function tt = Obj(0).Submatches.Item(Idx - 1) End With End Function