Страницы: 1
RSS
Удаление дубликатов из 5 столбцов, После выгрузки контактов в Excel необходимо избавиться от дублей номеров, которые добавили мессенджеры
 
Здравствуйте, помогите пожалуйста с формулой,

Я выгрузил все контакты из андроид в Excel, чтобы потом привести их в надлежащий вид
После выгрузки оказалось что в одной строке контакта несколько одного и того же номера в колонках Mobile1, Mobile2, Mobile3, Mobile4, Mobile5.

получается что то вроде:
123, 456, 123,       , 123 в разных колонках
В итоге мне нужно, чтобы остались только отличающиеся:
123, 456
 
Удаление дубликатов в строках
Согласие есть продукт при полном непротивлении сторон
 
Код
=ЕСЛИОШИБКА(ИНДЕКС($A3:$D3;;ПОИСКПОЗ(1;СЧЁТЕСЛИ($J3:J3;$A3:$D3)+($A3:$D3<>"");));"")

формула массива.
 
Не получилось.
 
а где подтверждение? файл с тем что не получилось.
 
Цитата
andreyglad-48 написал:
Не получилось.
Цитата
V написал:
формула массива.
Если пишут "формула массива" (или сокращенно ФМ), значит вы должны ввести не через Энтер, а Ctrl+Shift+Enter
 
Подтверждение
Изменено: andreyglad-48 - 14.02.2019 11:32:43
 
у вас диапазон убежал.
 
andreyglad-48, вариант в Power Query:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    toColumns = List.Transform(Table.ToColumns(Table.Transpose(Source)), each List.RemoveNulls(List.Distinct(_))),
    headers = Table.ColumnNames(Source),
    transform = List.Transform(toColumns, each _ & List.Repeat({null}, List.Count(headers) - List.Count(_))),
    final = #table(headers,transform)
in
    final
 
Aleksei_Zhigulin, не пойму как сделать шаги  toColumns и transform Вашего запроса. как от  кнопочного варианта собрать эти шаги? не могли бы показать с пояснениями.
 
artyrH, если кнопками, то можно так, руками только в 6 строке Table.AddIndexColumn( _ , "Индекс2", 1, 1) дописывал.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Добавлен индекс" = Table.AddIndexColumn(Источник, "Индекс", 0, 1),
    #"Другие столбцы с отмененным свертыванием" = Table.UnpivotOtherColumns(#"Добавлен индекс", {"Индекс"}, "Атрибут", "Значение"),
    #"Удаленные дубликаты" = Table.Distinct(#"Другие столбцы с отмененным свертыванием", {"Значение"}),
    #"Сгруппированные строки" = Table.Group(#"Удаленные дубликаты", {"Индекс"}, {{"Таб", each Table.AddIndexColumn(_, "Индекс2", 1, 1), type table}}),
    #"Развернутый элемент Таб" = Table.ExpandTableColumn(#"Сгруппированные строки", "Таб", {"Значение", "Индекс2"}, {"Значение", "Индекс2"}),
    #"Сведенный столбец" = Table.Pivot(Table.TransformColumnTypes(#"Развернутый элемент Таб", {{"Индекс2", type text}}, "ru-RU"), List.Distinct(Table.TransformColumnTypes(#"Развернутый элемент Таб", {{"Индекс2", type text}}, "ru-RU")[Индекс2]), "Индекс2", "Значение"),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Сведенный столбец",{"Индекс"})
in
    #"Удаленные столбцы"
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо. мне в решении Aleksei_Zhigulin интересна последовательность действий. какие шаги сделать сначала и как далее все собирать. не с клавиатуры же все набиралось  или все таки с клавиатуры...
 
PooHkrd, поправлю чуток:
Код
= Table.Distinct(#"Другие столбцы с отмененным свертыванием", {"Индекс", "Значение"})
 
Цитата
artyrH написал:
или все таки с клавиатуры...
Так!
Такие функции не генерируются кнопками. А учитывая любовь Алексея к решению большинства задач через списки и записи, подозреваю, что он как и Андрей VG на кнопки интерфейса толком никогда и не жал, а сразу начал работать с языком М написанием кода в расширенном редакторе. Очень похоже, что у него за плечами большой опыт программирования на другом языке. Тем не менее алгоритм, который я показал вам на кнопках очень схож с тем, который применил в своем решении Алексей, просто я использовал другие функции.
Цитата
Aleksei_Zhigulin написал:
поправлю чуток:
Согласен.
Изменено: PooHkrd - 14.02.2019 17:48:20
Вот горшок пустой, он предмет простой...
 
Не совсем понимаю, зачем так сложно.

Решение V с помощью формулы массива всё очень даже получилось, спасибо.
 
Цитата
andreyglad-48 написал:
Не совсем понимаю, зачем так сложно.
Ну так использовать их все вас же никто не заставляет. Мы накидали - вы выбирайте. Может кому-то другому пригодится.
Вот горшок пустой, он предмет простой...
 
Цитата
artyrH написал:
или все таки с клавиатуры...
В этом случае - да, с клавиатуры.

Цитата
PooHkrd написал:
Очень похоже, что у него за плечами большой опыт программирования на другом языке.
Вашими бы устами...  :D  Это не про меня, к сожалению) PQ осваивал по кнопкам, да и сейчас мне зачастую проще сформировать код кнопками, а потом уже корректировать вручную. Тем более, IntelliSense в Excel пока не подвезли.
 
Цитата
Aleksei_Zhigulin написал:
зачастую проще сформировать код кнопками, а потом уже корректировать вручную
потому и задал вопрос в этой теме. не получается у меня коррекция. каждый раз какой нибудь тикен да не хватает. а кнопками шагов много получается. ну да ладно)
 
Цитата
Aleksei_Zhigulin написал:
Это не про меня, к сожалению
Значит ошибся - очень уж у вас не типичные подходы для кнопкоклацателя  :D
Ну что ж может и я когда-нибудь дойду до такого скилла. Мне все таки не просто даются такие конструкции, которую вы завернули в своем решении. Практики маловато.
Вот горшок пустой, он предмет простой...
 
Доброе время суток.
Вариант, с чуть иным подходом, чем у коллеги Aleksei_Zhigulin
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    heads = Table.ColumnNames(Source),
    uniques = List.Transform(Table.ToRows(Source), each List.RemoveNulls(List.Distinct(_))),
    result = Table.Transpose(Table.FromColumns(uniques, null), heads)
in
    result
 
Цитата
PooHkrd написал:
Ну что ж может и я когда-нибудь дойду до такого скилла.
Ну, по-моему, Вам-то на скилл грех жаловаться. ;)  Хотя пределов совершенству нет, и до таких мастеров как Андрей VG нам по-прежнему далеко. Его решение более элегантное. Небольшой разбор, вдруг кому пригодится:
1. В моем коде используется конструкция Table.ToColumns(Table.Transpose(Source)), конечно, лаконичнее будет просто Table.ToRows(Source).
2. Необходимость шага transform в моем коде обусловлена тем, что в финальную таблицу должен был подаваться список столбцов одинаковой длины. Однако, функция Table.FromColumns(uniques, null) (или в данном примере можно просто Table.FromColumns(uniques)) работает со списками разной длины, недостающие значения заполняются как null.
3. Функция Table.Transpose имеет второй параметр, поэтому можно сразу передать в неё заголовки столбцов из исходной таблицы - Table.Transpose(Table.FromColumns(uniques, null), heads).
 
Цитата
Aleksei_Zhigulin написал:
разбор, вдруг кому пригодится
конечно пригодится. я думаю, в любом случае надо комментировать - всегда найдется кому прочитать, а кто то еще и будет использовать подобные варианты решений.  
 
Aleksei_Zhigulin, просьба помочь, немного модернизировать Ваш ответ - собрать уникальные значения на 2 группы и оставить дополнительные поля.
 
Андрей VG, большая просьба к Вам. Не могу понять как оставить другие столбцы без изменений (Номер, Комм1, Комм2), когда удаляем дубликаты  столбцов  Вашем примере (1,2,3, 4).
 
olegMir, для этого нужен другой подход. Вариант ниже (группы заданы вручную):
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица15"]}[Content],
    group = Table.Group(Source, {"NN", "Комм."}, {"temp", each [a = (x,y) =>Text.Combine(List.Transform(List.Union({x,y}), Text.From),";"), b = a([1],[2]), c = a([3],[4])]}),
    expand = Table.ExpandRecordColumn(group, "temp", {"b", "c"}, {"1+2", "3+4"}),
    reorder = Table.ReorderColumns(expand,{"NN", "1+2", "3+4", "Комм."})
in
    reorder
Изменено: Aleksei_Zhigulin - 16.09.2019 14:57:37
 
Или лучше так:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица15"]}[Content],
    func = (x,y) => Text.Combine(List.Transform(List.Distinct({x,y}), Text.From),";"),
    add = Table.AddColumn(Source, "temp", each [#"1+2" = func([1],[2]), #"3+4" = func([3],[4])]),
    expand = Table.ExpandRecordColumn(add, "temp", {"1+2", "3+4"}),
    final = Table.SelectColumns(expand,{"NN", "1+2", "3+4", "Комм."})
in
    final
 
Aleksei_Zhigulin, очень благодарен за помощь. Все отлично работает. Взял первый вариант.
Страницы: 1
Наверх