Страницы: 1 2 След.
RSS
поставить пробел между текстом и цифрой с определённой буквой, в конце теста иногда встречаются прикреплённые цифры, их нужно отделить
 
формат текста такой:
Twin F10036 Lon.Skyl.Tin3x - красным покрасил нужный фрагмент для отделения, после цифры идет знак(буква): x, X, с пробелом или без. Есть идеи какие-нить?
 
x - это всегда латиница? Или может быть кириллица?
Вот горшок пустой, он предмет простой...
 
PooHkrd, от Х все равно сложно оттолкнуться, а вдруг до него будет еще несколько иксов....
например
TwinX FX10036X LonX.Skyl.Tin3x ПО 100 ГР.
Думал через регулярки попробовать...не сооброжу никак. Регулярные выражения
Но в них я так понимаю пробел не вставить.... если только через доп столбец

Надо от "ПО 100 ГР" начинать)))
Изменено: venom51 - 14.11.2019 18:12:12
 
UDF
Код
Function iTowar(cell$)
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "[A-Z]\d{1,2}(?=\s?[XХ])"
     iTowar = Left(cell, .Execute(cell)(0).FirstIndex + 1) & " " & Mid(cell, .Execute(cell)(0).FirstIndex + 2)
 End With
End Function
Изменено: Kuzmich - 14.11.2019 18:16:09
 
venom51, дык я с ПО и начинаю, а вот дальше надо сканировать сочетания букв и цифр с пробелами. У ТС там кириллица но как в реале - ХЗ
Вот горшок пустой, он предмет простой...
 
Вроде и формулами получается похоже
Код
=ПОДСТАВИТЬ(E18;ПСТР(E18;ЕСЛИОШИБКА(ПОИСК("х";E18)-4;ПОИСК("x";E18)-2);1);ПСТР(E18;ЕСЛИОШИБКА(ПОИСК("х";E18)-4;ПОИСК("x";E18)-2);1)&" ")
 
Вымучил таки вариант для PQ:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Cut = Table.AddColumn(Source, "НаименованиеТовара", each Text.BeforeDelimiter([Наименование товара], "ПО", {0, 1}), type text),
    AddedTextTable = Table.AddColumn(Cut, "1", each Table.FromColumns({Text.ToList([НаименованиеТовара])}) ),
    AddedIndexedText = Table.AddColumn(AddedTextTable, "2", each Table.AddIndexColumn([1], "Индекс", 0, 1) ),
    AddedPosition = Table.AddColumn(AddedIndexedText, "3", each 
        List.Max( 
            Table.AddColumn([2], "x", each 
                if Text.Lower([Column1]) = "x" or Text.Lower([Column1]) = "х" 
                    then null 
                    else try Number.From([Column1]) + null otherwise [Индекс])[x]
        ) + 1, Int64.Type ),
    CalcText = Table.AddColumn(AddedPosition, "Наименование товара 2", each 
        if [3] = null 
            then [Наименование товара] else 
            Text.Start([Наименование товара], [3]) & " " & Text.End([Наименование товара], Text.Length([Наименование товара]) - [3])),
    Out = Table.RemoveColumns(CalcText,{"НаименованиеТовара", "1", "2", "3"})
in
    Out

Код универсальный для "х" как в латинице, так и в кириллице.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
x - это всегда латиница? Или может быть кириллица?
любой знак, любой регистр, нам поставщики присылают в таком виде, что там зарыто,- неведаю
а как ваш код? он до конца дописан, или нет?
Изменено: Домкрат - 14.11.2019 19:24:11
 
Kuzmich, я не ведаю как запускать Function iTowar(cell$).
 
UDF в стандартный модуль, в нужную ячейку вставляете =iTowar(E18) и протягиваете вниз
 
Домкрат, если слово "ПО" всегда пишется заглавными, то до конца, если нет, то надо будет малость поправить.
Вот горшок пустой, он предмет простой...
 
Цитата
GRIM написал:
Вроде и формулами получается похоже
Массивная формула. Подставляет только один раз в самом правом месте строки. В тексте могут встречаться другие "х".
Код
=ЗАМЕНИТЬ(E18;МАКС((ПСТР(ЛЕВБ(E18;МАКС(((ПСТР(E18;СТРОКА($5:$99);1)="x")+(ПСТР(E18;СТРОКА($5:$99);1)="х"))*((ПСТР(E18;СТРОКА($4:$98);1)=" ")+(ЕЧИСЛО(-ПСТР(E18;СТРОКА($4:$98);1))))*(ПСТР(E18;СТРОКА($3:$97);1)>="0")*СТРОКА($4:$98)));СТРОКА($4:$98);1)>"9")*СТРОКА($5:$99));;" ")
 
Доброе время суток
Цитата
Kuzmich написал:
Left(cell, .Execute(cell)(0).FirstIndex + 1) & " " & Mid(cell, .Execute(cell)(0).FirstIndex + 2)
Зачем же так усложнять-то?
Код
Function iTowar(ByVal sText As String)
 With CreateObject("VBScript.RegExp")
     .IgnoreCase = True
     .Pattern = "([A-Z])(\d{1,2})(?=\s?[хx])"
     iTowar = .Replace(sText, "$1 $2")
 End With
End Function
Изменено: Андрей VG - 14.11.2019 22:30:11
 
PooHkrd, заглавными пишется "ПО", просто Ваш код весь красным получается при вставке в модуль.
 
Kuzmich, а если просто макрос с началом и концом таблицы,- вручную нереально ничего протягивать. - это просто один из эпизодов работы большой надстройки. Должен запускаться после работы других макросов в фоновом режиме.
 
Андрей VG, Согласен, только паттерн надо поменять
Код
     .Pattern = "([A-Z])(\d{1,2})(?=\s?[хx])"

видимо при копировании произошел сбой
 
Цитата
а если просто макрос с началом и концом таблицы
Так переделайте UDF в макрос
 
Цитата
Андрей VG написал:
Зачем же так усложнять-то?
и правда :-)
=IFERROR(REPLACE(E18;MIN(IF(ISNUMBER(--TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(REPLACE(UPPER(E18);1;ROW($1:$99););"X";"Х");"Х";REPT(" ";99));99)));ROW($1:$99)+1));;" ");E18)
Изменено: БМВ - 14.11.2019 22:05:57
По вопросам из тем форума, личку не читаю.
 
Цитата
Kuzmich написал:
только паттерн надо поменять
Спасибо поправил. Просто сделал на всякий случай и для кириллической х, и как водится забыл скопировать код на русской раскладке.
 
Немного сократил:
Код
=ЗАМЕНИТЬ(E18;МАКС((ПСТР(ЛЕВБ(E18;МАКС(ЕСЛИ(МУМНОЖ(Ч(ПСТР(E18;СТРОКА($5:$99);{1;1;2;2})={"х";"x";" х";" x"});СТРОКА(1:4))*ЕЧИСЛО(-ПСТР(E18;СТРОКА($4:$98);1));СТРОКА($3:$97))));СТРОКА($3:$97);1)>"9")*СТРОКА($4:$98));;" ")
 
Андрей VG, написал
Цитата
Просто сделал на всякий случай и для кириллической х
Так у меня в паттерне так и было
 
Цитата
Светлый написал:
Немного сократил:
сделал матричным и еще  и не совсем рабочим :-)
Светлый, Файл прикладывать не обязательно, но для перевода формул рекомендую.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Файл прикладывать
Подсмотрел кое у кого интересные хитрости и переделал по-своему:
Код
=ЗАМЕНИТЬ(E18;МИН(ЕСЛИ(ЕЧИСЛО(-ЗАМЕНИТЬ(ЛЕВБ(E18;ЕСЛИ(ПОИСК(ПСТР(E18;СТРОКА($2:$99);1);"@хx")>1;СТРОКА($1:$98)));1;СТОЛБЕЦ(A:CU);));СТОЛБЕЦ(B:CV)));;" ")
 
Домкрат, Дык, не мудрено. Это ж не код vba. Это код запроса для power query. А вы его в модуль...
Изменено: PooHkrd - 15.11.2019 10:09:55
Вот горшок пустой, он предмет простой...
 
Светлый,  Судя по всему уже последние венцы кладем  :D
=IFERROR(REPLACE(E18;MIN(IF(ISNUMBER(-LEFT(SUBSTITUTE(SUBSTITUTE(MID(UPPER(E18);ROW($1:$99);99);"X";"Х");"Х";REPT(" ";99));99));ROW($1:$99)));;" ");E18)
ну или короче, но думаю чууууть медленнее
=IFERROR(REPLACE(E18;MIN(IF(ISNUMBER(-LEFT(SUBSTITUTE(MID(UPPER(E18);ROW($1:$99);99);{"X""Х"};REPT(" ";99));99));ROW($1:$99)));;" ");E18)
а вот совсем кратенько но ошибется если будет X
=IFERROR(REPLACE(E18;MIN(IF(ISNUMBER(-MID(LEFT(E18;SEARCH({"X""Х"};E18)-1);ROW($1:$99);99));ROW($1:$99)));;" ");E18)
Изменено: БМВ - 15.11.2019 09:31:07
По вопросам из тем форума, личку не читаю.
 
Цитата
Kuzmich напесал:
в нужную ячейку вставляете =iTowar(E18) и..
и получаю вот это
Twin   F10036 Lon.Skyl.Tin 3x ПО 100 ГР.
а если в тексте нет сочетания цифра+ X, то получаем вот это:
#ЗНАЧ!
можете просто макрос написать, не функцию,- остальное я доделаю?
Изменено: Домкрат - 15.11.2019 10:19:01
 
Домкрат, и в чем проблема написать так?
Код
=ЕСЛИОШИБКА( iTowar(E18); E18 )
Вот горшок пустой, он предмет простой...
 
а как в одной строчке совместить, чтобы число с пробелами видело и без пробелов, вот так видит БЕЗ пробелов:
objRegExp.Pattern = "(\S)(\d){1,2}( )?([А-Яа-яA-zA-z])\b", а вот так с ТОЛЬКО пробелами:
objRegExp.Pattern = "( )(\d){1,2}( )?([А-Яа-яA-zA-z])\b"
У меня только вызов макроса на ум приходит с нужной строчкой.
Изменено: Домкрат - 15.11.2019 13:32:13
 
Про количество файлов, которые вам нужно обработать в изначальном посте ничего не было.
Вы бы сразу сформулировали задачу корректно, вам бы и решения предлагали исходя из неё. А по условию задачи в текущей теме вам предложили вагон решений. Осталось только выбрать.
Вот горшок пустой, он предмет простой...
 
Домкрат, написал
Цитата
если в тексте нет сочетания цифра+ X
хотя в первом сообщении явно указано
Цитата
после цифры идет знак(буква): x, X, с пробелом или без
На ваш запрос и был дан ответ
Страницы: 1 2 След.
Наверх