Страницы: 1
RSS
Преобразовать горизонтальную таблицу (с несколькими заголовками в начале) в вертикальную
 
Всем привет! Есть таблица (ниже) необходимо преобразовать ее в горизонтальную (классическую) с учетом того, что в некоторых записях отсутствует email и дата последнего визита.  Таблица выглядит следующим образом:
Имя
Телефон
Email
Продано
Визиты
Скидка
Последний визит
Первый визит
Надежда Полина
+7 919 999-99-99
polina345@gmail.com
226 535.1 ₽
44
20%
19 апреля 2021 г. в 10:00
6 апреля 2017 г. в 13:00
Наталья
+7 999 999-587-57
153 961 ₽
21
15%
26 апреля 2021 г. в 12:30
3 мая 2018 г. в 10:00
Ольга Икон
+7 999 999-99-99
o.iko@rest.ru
144 993 ₽
130
20%
24 декабря 2020 г. в 18:30
21 июля 2015 г. в 17:30
Заранее спасибо!
 
Цитата
Дмитрий Голубев написал:
Есть таблица (во вложении)
где? кроме текста не видно ничего
Не бойтесь совершенства. Вам его не достичь.
 
Так выглядит таблица (как в посте), просто каждая запись в новой строке, в самом начале таблицы заголовки.
Очень похоже на эту задачу, только кол-во строк не фиксированное: https://www.planetaexcel.ru/techniques/2/4191/
 
Дмитрий Голубев,  еще разок - это текст это не таблица...
пункты из правил:
Цитата
  2.2. Опишите максимально подробно вашу задачу и желаемый результат. Желательно уточнить вашу версию Excel.
  2.3. Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
Не бойтесь совершенства. Вам его не достичь.
 
Извиняюсь за невнимательность к правилам.
К сожалению таблица объемом более 100 Кб. Но к этому сообщению прикрепить получилось.
Соответственно два листа, что есть и что надо получить на выходе.
 
Дмитрий Голубев, вариант решения на Power Query
Код
let
    Source = Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],{{"Столбец1", type text}}),
    Headers = Table.FirstN(Source,8)[Столбец1],
    Rows = Table.FromColumns( {{""} & Table.Skip(Source,8)[Столбец1], Table.Skip(Source,8)[Столбец1] & {""}} ),
    Grouped = Table.Group(
        Rows, 
        {"Column1", "Column2"}, 
        {{"a", each if Text.Contains([Column2]{2},"@") then [Column2] else List.InsertRange([Column2], 2, {null}) }}, 
        0, 
        (a,b)=>Number.From(Text.Contains(b[Column1],":") and not Text.Contains(b[Column2],":") ) ),
    FilteredEmpty = Table.SelectRows(Grouped, each [Column2] <> "")[a],
    Out = Table.FromRows(FilteredEmpty,Headers)
in
    Out
Изменено: PooHkrd - 17.05.2021 19:39:27
Вот горшок пустой, он предмет простой...
 
PooHkrd, огромное спасибо за элегантное решение задачи!
Страницы: 1
Наверх