Страницы: 1
RSS
Объединение двух списков в третий с удалением повторяющихся значений.
 
Добрый день!

Проблема следующая: есть два столбца с данными, нужно объединить их в третий с удалением повторяющихся значений. Облазил уже все сайты, везде в основном пишут про создание из двух списков одного с уникальными значениями. Мне же нужно, чтобы повторяющиеся значения не попадали в третий столбец. Можно формулами, можно и на VBA.
Excel 2013.
Помогите, пожалуйста, а то уже три дня сижу.
Заранее спасибо!
 
uwerazz, c доп столбцами
выводим уникальные
Код
=ИНДЕКС($A$2:$A$40;ПОИСКПОЗ(1;ИНДЕКС((СЧЁТЕСЛИ(E$1:E1;$A$2:$A$40)=0)/($A$2:$A$40<>"");0);0))
Определяем количество повторений
Код
=СЧЁТЕСЛИ($A$2:$A$40;E2)
выводим спискок не повторяющихся
Код
=ИНДЕКС($E$2:$E$36;ПОИСКПОЗ(1;ИНДЕКС((СЧЁТЕСЛИ(G$1:G1;$E$2:$E$36)=0)/($F$2:$F$36=1);0);0))

ИЛИ

Код
 =ЕСЛИ(СЧЁТЕСЛИ($A$2:$A$40;A2)=1;A2;"")
Изменено: a.i.mershik - 05.04.2018 11:53:51
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо, такой вариант у меня есть. Но как в автомате приделать данные 2-го столбца к концу первого?  
 
uwerazz, скопировать. а там не знаю
Не бойтесь совершенства. Вам его не достичь.
 
скопировать два столбца в третий, выделить - вкладка Данные - удалить дубликаты. Это так трудоемко?
 
Цитата
Dima S написал:
удалить дубликаты
там не удалить дубликаты, там удалить те, которые есть в двух столбцах
 
можно так
Код
Sub sb()
Dim rng As Range
l = 2
For i = 1 To 2
    If i = 1 Then q = 2 Else q = 1
    For j = 2 To Cells(Rows.Count, i).End(xlUp).Row
        Set rng = Columns(q).Find(Cells(j, i).Value)
        If rng Is Nothing Then Cells(l, 3).Value = Cells(j, i).Value: l = l + 1
    Next
Next
End Sub

а и у Вас в результате 345 потеряно
 
Цитата
yozhik написал:
там не удалить дубликаты
если их скопировать в один они станут дубликатами.
про то что могут быть повторения в пределах одного столбца ТС ничего не говорил.
 
Dima S, станут) и после удаления, останутся уникальные. А они, если были дубликатами, вообще не должны остаться
 
Вариант на Power Query.
Код
let
    Источник1 = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    Источник2 = Excel.CurrentWorkbook(){[Name="Таблица2"]}[Content],
    Сбор = Источник1 & Источник2,
    #"Сгруппированные строки" = Table.Group(Сбор, {"Данные1"}, {{"Количество", each Table.RowCount(_), type number}}),
    #"Строки с применным фильтром" = Table.SelectRows(#"Сгруппированные строки", each [Количество] = 1),
    #"Другие удаленные столбцы" = Table.SelectColumns(#"Строки с применным фильтром",{"Данные1"}),
    #"Сортированные строки" = Table.Sort(#"Другие удаленные столбцы",{{"Данные1", Order.Ascending}})
in
    #"Сортированные строки"
Изменено: PooHkrd - 05.04.2018 12:54:22
Вот горшок пустой, он предмет простой...
 
Скрипт, для файла с отключенными библиотеками для словаря.
Код
Sub test()
    Dim dic As Object
    Dim i&, arr(), ikey
    Set dic = CreateObject("Scripting.Dictionary")
    Лист1.Columns(3).ClearContents
    arr = Лист1.Range("a1").CurrentRegion.Offset(1, 0).Value
    For Each ikey In arr
        If ikey <> Empty Then
            If Not dic.Exists(CStr(ikey)) Then
                dic.Item(CStr(ikey)) = 0
            Else: dic.Remove (CStr(ikey))
            End If
        End If
    Next ikey
    Лист1.[c1].Value = "Результат"
    With Лист1.Range("c2").Resize(dic.Count)
        .Value = Application.Transpose(dic.Keys)
        .Sort Key1:=[c2], Order1:=xlAscending, Header:=xlNo
    End With
End Sub
Изменено: Nordheim - 05.04.2018 20:10:45
"Все гениальное просто, а все простое гениально!!!"
 
Всем спасибо. Будем проверять. По поводу скопировать и вставить не вариант, делается для девушек. Все должно быть на автомате :)
Страницы: 1
Наверх