Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Преобразовать СЛОЖНУЮ вертикальную таблицу в горизонтальный формат, Преобразовать СЛОЖНУЮ вертикальную таблицу в горизонтальный формат
 
Добрый день,уважаемые форумчане. Столкнулся с проблемой преобразования вертикальной таблицы в горизонтальный формат - Транспонирование,не помогает,тк кол-во ячеек(с данными) для каждой строчки отличается.
  Столбец B ( файл будет во вложении) и каждое повторяющееся значение в ячейке означают(выделены в примере синим и красным цветом),что информация относится к конкретному клиенту.
   Красным цветом выделены именно по 3 строчки без указания контакта. Синим по 4ре с контактом. Так же в примере присутствует бежевый цвет,это строчки "а-ля дубляжи", но если бы они были полными дубляжами соответствующих строк - их можно было легко удалить без вопросов.Но я не смог придумать,что с ними сделать и как их убрать. (только как вручную,но кол-во контактов немаленькое ,за 8 лет работы,поэтому вручную  - это долго и муторно)
  Видимо,для форматирования таблицы в горизонтальный формат необходимо написать(или использовать имеющийся скрипт) ,который будет сверять столбик B - значения относящиеся к одному человеку и копировать значение столбика D(каждой ячейки) и вставлять значения построчно, и как только значение новой ячейки столбика B не совпадут с предыдущим - значит начинается новая строка. Собственно я так это вижу,но сделать сам не знаю как.

Просьба помочь с данным вопросом,ибо никак не получается его самостоятельно(и с помощью гугла) решить.

*файл будет во вложении,там все отмечено,что написано выше (так же внутри таблицы будет "примерный" формат того,как хотелось бы видеть конечный результат)
**Контактные данные закрыты *** в соответствии с правилами размещения.


С уважением, Валерий Микулин
Жду Ваших ответов!
 
как вариант на PQ
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    group = Table.Group(Источник, {"Соответствие", "Данные"}, {"tmp", each Table.AddIndexColumn(_, "index", 1, 1)}),
    Пользовательский1 = Table.Combine(group[tmp]),
    #"Измененный тип" = Table.TransformColumnTypes(Пользовательский1,{{"index", type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Измененный тип", "out", each [Данные] & [index]),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Добавлен пользовательский объект",{"Данные", "index"}),
    #"Сведенный столбец" = Table.Pivot(#"Удаленные столбцы", List.Distinct(#"Удаленные столбцы"[out]), "out", "Клиент(фио+др)"),
    #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Сведенный столбец",{"Соответствие", "mobile_phone1", "name11", "name21", "name22", "name31", "name32"})
in
    #"Переупорядоченные столбцы"
 
еще вариант в Power Query
Код
let
    Source  = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][[Соответствие],[Данные],[#"Клиент(фио+др)"]],
    Columns = List.Distinct(Source[Данные]),
    Pivot   = Table.Buffer(Table.Pivot(Source, Columns, "Данные", "Клиент(фио+др)",each _)),
    Split   = List.Combine({{Pivot[Соответствие]}}&List.Transform(Table.ToColumns(Table.SelectColumns(Pivot,Columns)),List.Zip)),
    Result  = Table.FromColumns(Split)
in
    Result

чего-то перемудрил
Код
let
    Source  = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][[Соответствие],[Данные],[#"Клиент(фио+др)"]],
    Columns = List.Distinct(Source[Данные]),
    Pivot   = Table.Pivot(Source, Columns, "Данные", "Клиент(фио+др)",each _),
    Split   = List.Combine(List.Transform(Table.ToColumns(Pivot),each if Value.Is(_{0},type list) then List.Zip(_) else {_})),
    Result  = Table.FromColumns(Split)
in
    Result
Изменено: Андрей Лящук - 3 июн 2020 00:11:21
 
Вариант с дополнительной сводной таблицей Подсмотрел здесь
 
И еще в PQ
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    group = Table.Group(Source,{"Соответствие"},{{"a", each let a=_,b=a[#"Клиент(фио+др)"],c= if Text.Remove(b{0},{"0".."9","*"})
    <>b{0} then {a[Соответствие]{0}}&b else {a[Соответствие]{0}}&{""}&b in Table.FromRows({c})}}),
    Custom1 = Table.Combine(group[a])
in
    Custom1
 
Цитата
Stics написал:

Прикрепленные файлы
покупатели_ред.xlsx  (21.45 КБ)
Благодарю всех. Сейчас попробую в PQ,не работал с ним никогда,но попробую по мануалу найденному сделать и ставить ваш код.
Изменено: Валерий Микулин - 4 июн 2020 13:31:50
 
Валерий Микулин, вернитесь в своё сообщение и удалите то, что Вы ошибочно считаете цитатой.
И запомните: кнопка цитирования не для ответа!
 
Выражаю огромное спасибо Stics и остальным пользователям.с PQ разобрался, все получилось,ура!!!  :D  
Страницы: 1
Читают тему (гостей: 1)
Наверх