Страницы: 1
RSS
Разделить каждую строку из одной ячейки в отдельный столбец
 
Есть файл в котором характеристики товара в столбце В - расположены в одну строку, вот так:


Если кликнуть на ячейку в которой написаны характеристики, то они написаны вроде как столбиком - друг под другом, вот так:


Нужно раскидать каждую строку/характеристику в отдельный столбик, чтобы в итоге получилось так:


Заранее благодарен за помощь.
 
О, галерея Уффици опять.
В шапку вывести названия полей - они приметны, В исходной строке искать это поле, и брать информацию от найденного + длину названия поля, до следующе перевода строки (символа 10). Удачи.
По вопросам из тем форума, личку не читаю.
 
Благодарю за ответ.
Код
в шапку вывести названия полей 

Вы имеете в виду в ручную в первой строке прописать все названия характеристик, а дальше каким-то образом искать совпадение названия и подставлять значение к нему? Правильно я понял?

Но как можно найти соответствие? Ведь после каждого атрибута нет никакого символа, к которому можно было бы привязаться....  
 
А двоеточие не символ?
 
Я имел в виду, как понять где конец значения характеристики. То что НАЗВАНИЕ разделяется двумя точками от ЗНАЧЕНИЯ - понятно. Как можно понять что значение характеристики уже закончилось....

Да и как сами значения подставлять в созданные столбцы, тоже непонятно... Если кто-то знает как, помогите, пожалуйста. Спасибо
 
Цитата
БМВ написал:
галерея Уффици
погуглите, поймете к чему я это.
По вопросам из тем форума, личку не читаю.
 
Цитата
realmen80 написал:
как понять где конец значения характеристики.
Так ведь Михаил сразу Вам подсказал (см. #2) - символ 10. Это и есть перевод строки.
 
Код
 галерея Уффици
загуглил сразу же как вы написали, так как не понял к чему вы это написали - это Галерея Уффици во Флоренции, но как она к моему вопросу относится непонятно, также как и про симфол 10... Сейчас уже понял что таким сиволом обозначается перенос строки...

Спасибо за попытку помочь. Человеку который хоть немного разбирается в Ексель и формулах, возможно, это помогло бы. Мне к сожалению, это ничего не дает... :( Смысл вроде понятен, но как это реализовать - совсем непонятно. В любом случае - спасибо вам что отозвались.
 
Понятно. Тогда прямым текстом. ФАЙЛ пример в формате excel с вашими данными поможет и нам, и в первую очередь Вам. Картинки - не позволяют Вам помочь полноценно.
По вопросам из тем форума, личку не читаю.
 
Прошу прощения. Не обратил внимания, что я не прикрепил файлы когда размещал тему.
Это вроде даже в правилах написано, что обязательно нужен файл пример. Было бы хорошо, если бы не давало создавать тему, без файла примера.
Файлы приготовил изначально, но забыл их прикрепить. Спасибо что написали. Прикрепил и сам файл пример и что нужно получить в результате.  
 
realmen80, а зачем ДВА файла? В одном нельзя было показать "до" и "после"?
 
Цитата
раскидать каждую строку/характеристику в отдельный столбик
UDF, каждую в свой столбец
Код
Function Tip(cell As String) As String
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "Тип:(.+)(?=\n)"
     If .Test(cell) Then
       Tip = WorksheetFunction.Trim(.Execute(cell)(0).SubMatches(0))
     Else
       Tip = "Нет типа"
     End If
 End With
End Function

Function Marka(cell As String) As String
 With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "Торговая марка:(.+)(?=\n)"
     If .Test(cell) Then
       Marka = WorksheetFunction.Trim(.Execute(cell)(0).SubMatches(0))
     Else
       Marka = "Нет марки"
     End If
 End With
End Function
Остальные характеристики аналогично
 
=IFERROR(TRIM(LEFT(SUBSTITUTE(MID($B2;FIND(C$1&":";$B2)+LEN(C1)+1;999);CHAR(10);REPT(" ";999));999));"")
=IFERROR(TRIM(LEFT(SUBSTITUTE(MID($B2;FIND(C$1&":";$B2)+LEN(C$1)+1;999);CHAR(10);REPT(" ";999));999));"")
Изменено: БМВ - 21.04.2019 18:41:24
По вопросам из тем форума, личку не читаю.
 
Kuzmich, спасибо за вариант решения.

БМВ, спасибо за формулу. Протянул ее в другую строку, там уже не работает


Видимо из-за разного количества символов будет съезжать на каждой новой строке...
 
в PQ
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Характеристики", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Характеристики"),
    #"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "Характеристики", Splitter.SplitTextByDelimiter(":", QuoteStyle.Csv), {"Характеристики.1", "Характеристики.2"}),
    #"Pivoted Column" = Table.Pivot(#"Split Column by Delimiter1", List.Distinct(#"Split Column by Delimiter1"[Характеристики.1]), "Характеристики.1", "Характеристики.2")
in
    #"Pivoted Column"
 
artyrH, спасибо. Попробовал запустить код и получил ошибку...


Не могу понять что должно называться как "Таблица 1" ? Сам документ назвал так - не оно... Лист в документе назвал - не оно...
 
Цитата
realmen80 написал:
Не могу понять что должно называться как "Таблица 1" ?
Может быть сама таблица?
 
.
 
artyrH, спасибо за помощь и пример.

Никогда до этого не сталкивался с power query... Даже не знал что в Экселе есть такая штука... По Вашему примеру понял как нужно было таблицу строить. Еще раз спасибо. Ваш вариант срабатывает очень быстро и сразу же получается результат.
 
Цитата
realmen80 написал:
Видимо из-за разного количества символов будет съезжать
Изменил формулу, просто забыл бакс воткнуть.
Изменено: БМВ - 21.04.2019 18:42:28
По вопросам из тем форума, личку не читаю.
 
Тут на форуме уже много раз пробегала UDF Substring() - можно использовать её, если правильно писать заглавия столбцов:
Код
=ПОДСТАВИТЬ(Substring($B2;СИМВОЛ(10);СТОЛБЕЦ()-2;СТОЛБЕЦ()-2);C1&":";"")

Т.е. извлекаем строку типа
Тип: Автомодель на р/у
заменяем в ней заголовок + двоеточие на ничего.
 
БМВ, спасибо. Теперь все ок.

Hugo, спасибо за еще один вариант решения вопроса.

Попробовал использовать формулу, но выдает ошибку:
 
Цитата
Hugo: на форуме уже много раз пробегала UDF Substring()
Цитата
realmen80: Попробовал использовать формулу
вангую, у вас просто нет сторонней макрофункции Substring()
Цитата
realmen80: Галерея Уффици во Флоренции, но как она к моему вопросу относится непонятно
Вики: «Уффици обладает сгруппированной в одном месте богатой коллекцией…» типа всё в куче, как в вашей задаче  ;)
Изменено: Jack Famous - 22.04.2019 10:06:48
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, спасибо  за ответ. Перешел по вашей ссылке. Добавил новый модуль с кодом функции, как там написано:

Цитата

Вставляем новый модуль (меню Insert - Module) и копируем туда текст вот этой пользовательской функции:

Function Substring(Txt, Delimiter, n) As String
Dim x As Variant
   x = Split(Txt, Delimiter)
   If n > 0 And n - 1 <= UBound(x) Then
       Substring = x(n - 1)
   Else
       Substring = ""
   End If
End Function


=SUBSTRING(Txt; Delimeter; n)Теперь можно найти ее в списке функций в категории Определенные пользователем (User Defined) и использовать со следующим синтаксисом:

Теперь вот такая ошибка:
Изменено: realmen80 - 22.04.2019 10:37:48
 
realmen80, отредактируйте избыточное цитирование. По использованию функции Hugo сможет подсказать, что имел ввиду. Пока что: в функции по моей ссылке 3 аргумента, а у Hugo - 4. Значит другая какая-то.

P.S.: чем вариант от Kuzmich'а не устраивает? Готовое же решение…
Изменено: Jack Famous - 22.04.2019 10:36:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
P.S.: чем вариант от Kuzmich'а не устраивает? Готовое же решение…

Все устраивает. Просто предложили новый вариант решения - решил попробовать его. Он не сработал - написал об этом. Может кто-то в будущем захочет его использовать
 
Цитата
realmen80: Может кто-то в будущем захочет его использовать
если не получится, создадут тему и спросят))) похвально, что вы о других думаете, однако это скорее всего никто на фиг не оценит, потому что проблема скорее всего не повториться в точности, а шаг влево/вправо для большинства — совсем другая проблема…

P.S: Увидел, что в #21 Hugo уже всё объяснил про свою функцию)
Изменено: Jack Famous - 22.04.2019 10:50:38
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Хорошо. Спасибо за ответы.  
Страницы: 1
Наверх