Страницы: 1
RSS
Через каждые N символов поставить разелитель
 
Существует следующая задача: Имеется сплошной текст в ячейке А1 - кол-во символов 16800. Формат примерно следующий 00031E340F110111400B5511B8F5501854B660206A26D029447C803512C8­B0354754D03E09C44046B3E9B04FFACBE05B....

Нужно через каждые 8 символов поставить запятую и пробел, что бы получилось .
00021E34, 0F110177, 400B1111, B8F0D018, 54B0D020, 1A26D029, 447C8035 .......

Мастер распределения в данном случае не работает, существующие по данной теме кейсы в интернете тоже не нашел.
Можно будет работать макрос, но готового решения или близкого к тому не нашел
 
Макрос в тексте не работает. :) Файл-пример сделайте, покажите где исходные, где нужен результат. Что за файл-пример и прочие подробности в правилах подробно есть.

З.Ы.
Здравствуйте.
Изменено: Пытливый - 12.12.2019 16:52:45
Кому решение нужно - тот пример и рисует.
 
Jon Golt, а PQ не подходит?!
Не бойтесь совершенства. Вам его не достичь.
 
Можно использовать =ЛЕВСИМВ(B2;(ДЛСТР(B2)-3))& или ПРАВСИМВ, смотря какой веры исповедания)))) и потом это все через & соединить. В принципи будет работать если дли текста всегда одинакова, если нет то макрос
 
lastforonee, можете показать!??
на  :D
Цитата
Jon Golt написал: символов 16800
Не бойтесь совершенства. Вам его не достичь.
 
Jon Golt, Доброго дня :) в наглую стырено от сюда >>>, а вообще вот >>>

P.S. название "через каждые N символов поставить запятую и пробел"
 
Цитата
Wild.Godlike: "через каждые N символов поставить запятую и пробел"
«Разделить текст в ячейке с заданным шагом»
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Вариант на Power Query:
Код
= Text.Combine( Splitter.SplitTextByRepeatedLengths(8)("00031E340F110111400B5511B8F5501854B660206A26D029447C803512C8­B0354754D03E09C44046B3E9B04FFACBE05B...."), ", " )
Вот горшок пустой, он предмет простой...
 
Ну, если Вам разово нужно разобрать эту строку, то можно извратиться формулой.
=ЛЕВСИМВ(B1;8*СТРОКА(A1)+2*СТРОКА(A1)-2) & ", " & ПСТР(B1;8*СТРОКА(A1)+2*СТРОКА(A1)-2+1;9999999)

Протянуть вниз, пока все разряды не поделит (2101 строка, вроде бы)
Изменено: Wiss - 12.12.2019 17:13:05
Я не волшебник, я только учусь.
 
Jon Golt, В PQ
Не бойтесь совершенства. Вам его не достичь.
 
Jack Famous, Ну имхо, разделить текст как по мне так это по ячейкам, а тут мы по факту вставляем в этот же текст данные :) ну такое ) смотря с какой стороны посмотреть.)))
 
Mershik, это слишком уж заморочно. Берите на вооружение мою формулу. Так и работает быстрее.
Вот горшок пустой, он предмет простой...
 
=ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(
         ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(A1;
                   97;;", ");89;;", ");81;;", ");73;;", ");65;;", ");57;;", ");49;;", ");41;;", ");33;;", ");25;;", ");17;;", ");9;;", ")
 
PooHkrd, та я по памяти что делал в PQ когда-то...не особо сейчас в PQ работаю но все же возьму на заметку. Спасибо.
Не бойтесь совершенства. Вам его не достичь.
 
Wild.Godlike, также можно сказать, что, если нужно вставить НЕ запятую и пробел, то тема не подойдёт, а это не так, поэтому «Проставить разделитель в строке с заданным шагом (через каждые N символов)»  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
vikttur написал:
=ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(
Хватит скандировать!!!  :D  
По вопросам из тем форума, личку не читаю.
 
Не хватит! Положено 12 раз!  :)
 
Макрос. Если результат получается больше 32 тысяч символов - выдаёт ошибку
Код
Public Function mysplit(sInput As Variant, Optional ByVal delim As String = ", ") As Variant
    Dim s As String
    s = CStr(sInput)
    Dim i As Long
    
    i = 8
    Do While i < Len(s)
        s = Left(s, i) & delim & Mid(s, i + 1)
    
        i = i + 10
    Loop
    mysplit = s
End Function
Я не волшебник, я только учусь.
 
Цитата
Wiss написал:
Положено 12 раз!
Вообще-то, по моим подсчётам автор просил 2101 заменить. +/-2
Изменено: Wiss - 12.12.2019 17:31:39
Я не волшебник, я только учусь.
 
UDF:
Код
Function Разделить_текст_в_ячейке_с_шагом8(S$)
ReDim A(0 To (Len(S) - 1) \ 8)
For I = 0 To UBound(A)
  A(I) = Mid$(S, I * 8 + 1, 8)
Next I
Разделить_текст_в_ячейке_с_шагом8 = Join(A, ",")
End Function
 
Отлично, спасибо!
Все получило!  
Страницы: 1
Наверх